Skip to content

Commit 113638d

Browse files
committed
Added documents without a workflowStatus to the configurable no status column
1 parent 094be29 commit 113638d

File tree

4 files changed

+37
-13
lines changed

4 files changed

+37
-13
lines changed

src/components/Board/Board.tsx

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,26 @@ import { DragDropContext, Droppable, DropResult } from "react-beautiful-dnd";
33
import BoardColumn from "./../BoardColumn/BoardColumn";
44
import { CollectionConfig, SelectField } from "payload/types";
55
import { LexoRank } from "lexorank";
6-
import { sortAndFilterDocumentsForStatus } from "../../utils/documents.util";
6+
import { sortAndFilterDocumentsForStatus, sortAndFilterDocumentsWithoutStatus } from "../../utils/documents.util";
77

88
import './styles.scss';
99

1010
interface BoardInterface {
1111
collection: CollectionConfig;
1212
statusDefinition: SelectField;
13+
hideNoStatusColumn?: boolean;
1314
documents: any[];
1415
onDocumentWorkflowStatusChange: (documentId: string, workflowStatus: string, orderRank: string) => void;
1516
}
1617

1718
const Board = (props: BoardInterface) => {
18-
const {statusDefinition, documents: initDocuments, onDocumentWorkflowStatusChange, collection} = props;
19+
const {
20+
statusDefinition,
21+
documents: initDocuments,
22+
hideNoStatusColumn,
23+
onDocumentWorkflowStatusChange,
24+
collection
25+
} = props;
1926
const [ documents, setDocuments ] = useState(initDocuments ?? []);
2027

2128
useEffect(() => {
@@ -139,16 +146,19 @@ const Board = (props: BoardInterface) => {
139146
>
140147
<div className="scrumboard-body">
141148

142-
<BoardColumn
143-
collection={collection}
144-
title={'No status'}
145-
identifier={'null'} contents={[]}
146-
collapsible={true}
147-
/>
149+
{ !hideNoStatusColumn &&
150+
<BoardColumn
151+
collection={ collection }
152+
title={ 'No status' }
153+
identifier={ 'null' }
154+
contents={ sortAndFilterDocumentsWithoutStatus(documents) }
155+
collapsible={ true }
156+
/>
157+
}
148158

149159
{ statusDefinition.options.map((status: any) => (
150160
<BoardColumn
151-
collection={collection}
161+
collection={ collection }
152162
key={ status.value }
153163
title={ status.label }
154164
identifier={ status.value }

src/components/WorkflowView/WorkflowView.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ import DefaultList from "payload/dist/admin/components/views/collections/List/De
1313
import WorkflowViewHeader from "../WorkflowViewHeader/WorkflowViewHeader";
1414
import { requests } from "payload/dist/admin/api";
1515
import Board from "../Board/Board";
16+
import { PluginCollectionConfig } from "../../index";
1617

1718
import './styles.scss';
1819

1920
const baseClass = 'scrumboard';
2021

21-
export const WorkflowView = (props: ListProps) => {
22+
export const WorkflowView = (config: PluginCollectionConfig) => (props: ListProps) => {
2223

2324
const {
2425
collection,
@@ -55,7 +56,7 @@ export const WorkflowView = (props: ListProps) => {
5556
const handleDocumentWorkflowStatusChange = (documentId: string, workflowStatus: string, workflowOrderRank: string) => {
5657
requests.patch(`${ serverURL }${ api }/${ collectionSlug }/${ documentId }`, {
5758
body: JSON.stringify({
58-
workflowStatus: workflowStatus,
59+
workflowStatus: workflowStatus === 'null' ? null : workflowStatus,
5960
workflowOrderRank: workflowOrderRank
6061
}),
6162
headers: {
@@ -110,6 +111,7 @@ export const WorkflowView = (props: ListProps) => {
110111
<Board
111112
collection={ collection }
112113
documents={ data.docs }
114+
hideNoStatusColumn={config.hideNoStatusColumn}
113115
statusDefinition={ statusDefinition }
114116
onDocumentWorkflowStatusChange={ handleDocumentWorkflowStatusChange }
115117
/>

src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { generateOrderRank } from "./hooks/generateOrderRank";
77
export interface PluginCollectionConfig {
88
statuses: OptionObject[],
99
defaultStatus?: string;
10+
hideNoStatusColumn?: boolean;
1011
}
1112

1213

@@ -57,7 +58,7 @@ const extendCollectionConfig = (
5758
},
5859
components: {
5960
views: {
60-
List: WorkflowView
61+
List: WorkflowView(collectionPluginConfig)
6162
}
6263
}
6364
}

src/utils/documents.util.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,15 @@ export const sortAndFilterDocumentsForStatus = (documents: any[] = [], status: s
77

88
return aOrderRank.localeCompare(bOrderRank)
99
});
10-
};
10+
};
11+
12+
export const sortAndFilterDocumentsWithoutStatus = (documents: any[] = []) => {
13+
return documents
14+
.filter((_doc) => !_doc.workflowStatus || _doc.workflowStatus === 'null')
15+
.sort((a, b) => {
16+
const aOrderRank = a.workflowOrderRank || '0'
17+
const bOrderRank = b.workflowOrderRank || '0'
18+
19+
return aOrderRank.localeCompare(bOrderRank)
20+
});
21+
}

0 commit comments

Comments
 (0)