@performant-software/semantic-components 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +0 -0
- package/build/index.js +2 -0
- package/build/index.js.map +1 -0
- package/build/main.css +786 -0
- package/index.js +1 -0
- package/package.json +37 -0
- package/src/components/AccordionDataList.css +8 -0
- package/src/components/AccordionDataList.js +224 -0
- package/src/components/AccordionList.css +27 -0
- package/src/components/AccordionList.js +596 -0
- package/src/components/AccordionSelector.css +3 -0
- package/src/components/AccordionSelector.js +359 -0
- package/src/components/ArrowButtons.css +4 -0
- package/src/components/ArrowButtons.js +38 -0
- package/src/components/AssociatedDropdown.css +44 -0
- package/src/components/AssociatedDropdown.js +338 -0
- package/src/components/BooleanIcon.css +0 -0
- package/src/components/BooleanIcon.js +33 -0
- package/src/components/CancelButton.css +0 -0
- package/src/components/CancelButton.js +25 -0
- package/src/components/ColorButton.css +4 -0
- package/src/components/ColorButton.js +34 -0
- package/src/components/ColorPickerModal.css +3 -0
- package/src/components/ColorPickerModal.js +77 -0
- package/src/components/ColumnResize.css +9 -0
- package/src/components/ColumnResize.js +20 -0
- package/src/components/DataList.css +0 -0
- package/src/components/DataList.js +531 -0
- package/src/components/DataTable.css +43 -0
- package/src/components/DataTable.js +596 -0
- package/src/components/DataTableColumnSelector.css +10 -0
- package/src/components/DataTableColumnSelector.js +146 -0
- package/src/components/DateInput.css +6 -0
- package/src/components/DateInput.js +58 -0
- package/src/components/DatePicker.css +72 -0
- package/src/components/DatePicker.js +81 -0
- package/src/components/DescriptorField.css +0 -0
- package/src/components/DescriptorField.js +42 -0
- package/src/components/DownloadButton.css +0 -0
- package/src/components/DownloadButton.js +23 -0
- package/src/components/Draggable.css +0 -0
- package/src/components/Draggable.js +94 -0
- package/src/components/DropdownButton.css +3 -0
- package/src/components/DropdownButton.js +65 -0
- package/src/components/DropdownMenu.css +0 -0
- package/src/components/DropdownMenu.js +68 -0
- package/src/components/EditModal.css +8 -0
- package/src/components/EditModal.js +99 -0
- package/src/components/EditPage.css +7 -0
- package/src/components/EditPage.js +249 -0
- package/src/components/EmbeddedList.css +7 -0
- package/src/components/EmbeddedList.js +278 -0
- package/src/components/FileInputButton.css +0 -0
- package/src/components/FileInputButton.js +54 -0
- package/src/components/FileUpload.css +31 -0
- package/src/components/FileUpload.js +188 -0
- package/src/components/FileUploadModal.css +0 -0
- package/src/components/FileUploadModal.js +408 -0
- package/src/components/FuzzyDate.css +8 -0
- package/src/components/FuzzyDate.js +575 -0
- package/src/components/GoogleMap.css +0 -0
- package/src/components/GoogleMap.js +105 -0
- package/src/components/GooglePlacesSearch.css +0 -0
- package/src/components/GooglePlacesSearch.js +43 -0
- package/src/components/HorizontalCards.css +50 -0
- package/src/components/HorizontalCards.js +226 -0
- package/src/components/ItemCollection.css +3 -0
- package/src/components/ItemCollection.js +159 -0
- package/src/components/ItemList.css +0 -0
- package/src/components/ItemList.js +126 -0
- package/src/components/Items.css +19 -0
- package/src/components/Items.js +365 -0
- package/src/components/ItemsToggle.css +0 -0
- package/src/components/ItemsToggle.js +168 -0
- package/src/components/KeyboardField.css +4 -0
- package/src/components/KeyboardField.js +147 -0
- package/src/components/LazyDocument.css +21 -0
- package/src/components/LazyDocument.js +113 -0
- package/src/components/LazyImage.css +21 -0
- package/src/components/LazyImage.js +119 -0
- package/src/components/LazyVideo.css +21 -0
- package/src/components/LazyVideo.js +131 -0
- package/src/components/LinkButton.css +8 -0
- package/src/components/LinkButton.js +23 -0
- package/src/components/LinkLabel.css +8 -0
- package/src/components/LinkLabel.js +29 -0
- package/src/components/List.css +8 -0
- package/src/components/List.js +761 -0
- package/src/components/ListFilters.css +0 -0
- package/src/components/ListFilters.js +408 -0
- package/src/components/ListLoader.css +8 -0
- package/src/components/ListLoader.js +32 -0
- package/src/components/ListTable.css +3 -0
- package/src/components/ListTable.js +86 -0
- package/src/components/LoginModal.css +7 -0
- package/src/components/LoginModal.js +102 -0
- package/src/components/MasonryGrid.css +48 -0
- package/src/components/MasonryGrid.js +202 -0
- package/src/components/MediaGallery.css +37 -0
- package/src/components/MediaGallery.js +148 -0
- package/src/components/MediaGrid.css +72 -0
- package/src/components/MediaGrid.js +74 -0
- package/src/components/MediaList.css +3 -0
- package/src/components/MediaList.js +98 -0
- package/src/components/ModalDropdown.css +11 -0
- package/src/components/ModalDropdown.js +84 -0
- package/src/components/NestedAccordion.css +41 -0
- package/src/components/NestedAccordion.js +276 -0
- package/src/components/PhotoViewer.css +3 -0
- package/src/components/PhotoViewer.js +36 -0
- package/src/components/PlayButton.css +3 -0
- package/src/components/PlayButton.js +37 -0
- package/src/components/RemoteDropdown.css +13 -0
- package/src/components/RemoteDropdown.js +368 -0
- package/src/components/SaveButton.css +0 -0
- package/src/components/SaveButton.js +31 -0
- package/src/components/Section.css +0 -0
- package/src/components/Section.js +41 -0
- package/src/components/Selectize.css +11 -0
- package/src/components/Selectize.js +297 -0
- package/src/components/SelectizeHeader.css +3 -0
- package/src/components/SelectizeHeader.js +40 -0
- package/src/components/TabbedModal.css +14 -0
- package/src/components/TabbedModal.js +165 -0
- package/src/components/TabsMenu.css +0 -0
- package/src/components/TabsMenu.js +35 -0
- package/src/components/TagsList.css +0 -0
- package/src/components/TagsList.js +43 -0
- package/src/components/Thumbnail.css +0 -0
- package/src/components/Thumbnail.js +47 -0
- package/src/components/Toaster.css +9 -0
- package/src/components/Toaster.js +73 -0
- package/src/components/VideoFrameSelector.css +3 -0
- package/src/components/VideoFrameSelector.js +148 -0
- package/src/components/VideoPlayer.css +3 -0
- package/src/components/VideoPlayer.js +55 -0
- package/src/components/VideoPlayerButton.css +17 -0
- package/src/components/VideoPlayerButton.js +17 -0
- package/src/components/ViewXML.css +0 -0
- package/src/components/ViewXML.js +72 -0
- package/src/i18n/en.json +204 -0
- package/src/i18n/i18n.js +24 -0
- package/src/index.js +76 -0
- package/types/components/AccordionDataList.js.flow +224 -0
- package/types/components/AccordionList.js.flow +596 -0
- package/types/components/AccordionSelector.js.flow +359 -0
- package/types/components/ArrowButtons.js.flow +38 -0
- package/types/components/AssociatedDropdown.js.flow +338 -0
- package/types/components/BooleanIcon.js.flow +33 -0
- package/types/components/CancelButton.js.flow +25 -0
- package/types/components/ColorButton.js.flow +34 -0
- package/types/components/ColorPickerModal.js.flow +77 -0
- package/types/components/ColumnResize.js.flow +20 -0
- package/types/components/DataList.js.flow +531 -0
- package/types/components/DataTable.js.flow +596 -0
- package/types/components/DataTableColumnSelector.js.flow +146 -0
- package/types/components/DataView.js.flow +125 -0
- package/types/components/DateInput.js.flow +58 -0
- package/types/components/DatePicker.js.flow +81 -0
- package/types/components/DescriptorField.js.flow +42 -0
- package/types/components/DownloadButton.js.flow +23 -0
- package/types/components/Draggable.js.flow +94 -0
- package/types/components/DropdownButton.js.flow +65 -0
- package/types/components/DropdownMenu.js.flow +68 -0
- package/types/components/EditModal.js.flow +99 -0
- package/types/components/EditPage.js.flow +249 -0
- package/types/components/EmbeddedList.js.flow +278 -0
- package/types/components/FileInputButton.js.flow +54 -0
- package/types/components/FileUpload.js.flow +188 -0
- package/types/components/FileUploadModal.js.flow +408 -0
- package/types/components/FuzzyDate.js.flow +575 -0
- package/types/components/GoogleMap.js.flow +105 -0
- package/types/components/GooglePlacesSearch.js.flow +43 -0
- package/types/components/HorizontalCards.js.flow +226 -0
- package/types/components/ItemCollection.js.flow +159 -0
- package/types/components/ItemList.js.flow +126 -0
- package/types/components/Items.js.flow +365 -0
- package/types/components/ItemsToggle.js.flow +168 -0
- package/types/components/KeyboardField.js.flow +147 -0
- package/types/components/LazyDocument.js.flow +113 -0
- package/types/components/LazyImage.js.flow +119 -0
- package/types/components/LazyVideo.js.flow +131 -0
- package/types/components/LinkButton.js.flow +23 -0
- package/types/components/LinkLabel.js.flow +29 -0
- package/types/components/List.js.flow +761 -0
- package/types/components/ListFilters.js.flow +408 -0
- package/types/components/ListLoader.js.flow +32 -0
- package/types/components/ListTable.js.flow +86 -0
- package/types/components/LoginModal.js.flow +102 -0
- package/types/components/MasonryGrid.js.flow +202 -0
- package/types/components/MediaGallery.js.flow +148 -0
- package/types/components/MediaGrid.js.flow +74 -0
- package/types/components/MediaList.js.flow +98 -0
- package/types/components/MenuBar.js.flow +77 -0
- package/types/components/MenuSidebar.js.flow +72 -0
- package/types/components/ModalDropdown.js.flow +84 -0
- package/types/components/NestedAccordion.js.flow +276 -0
- package/types/components/PhotoViewer.js.flow +36 -0
- package/types/components/PlayButton.js.flow +37 -0
- package/types/components/RemoteDropdown.js.flow +368 -0
- package/types/components/SaveButton.js.flow +31 -0
- package/types/components/Section.js.flow +41 -0
- package/types/components/Selectize.js.flow +297 -0
- package/types/components/SelectizeHeader.js.flow +40 -0
- package/types/components/TabbedModal.js.flow +165 -0
- package/types/components/TabsMenu.js.flow +35 -0
- package/types/components/TagsList.js.flow +43 -0
- package/types/components/Thumbnail.js.flow +47 -0
- package/types/components/Toaster.js.flow +73 -0
- package/types/components/VideoFrameSelector.js.flow +148 -0
- package/types/components/VideoPlayer.js.flow +55 -0
- package/types/components/VideoPlayerButton.js.flow +17 -0
- package/types/components/ViewXML.js.flow +72 -0
- package/types/hooks/Imageable.js.flow +54 -0
- package/types/i18n/i18n.js.flow +24 -0
- package/types/index.js.flow +78 -0
- package/webpack.config.js +3 -0
package/src/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
// Components
|
|
4
|
+
export { default as AccordionDataList } from './components/AccordionDataList';
|
|
5
|
+
export { default as AccordionList } from './components/AccordionList';
|
|
6
|
+
export { default as AccordionSelector } from './components/AccordionSelector';
|
|
7
|
+
export { default as ArrowButtons } from './components/ArrowButtons';
|
|
8
|
+
export { default as AssociatedDropdown } from './components/AssociatedDropdown';
|
|
9
|
+
export { default as BooleanIcon } from './components/BooleanIcon';
|
|
10
|
+
export { default as CancelButton } from './components/CancelButton';
|
|
11
|
+
export { default as ColorButton } from './components/ColorButton';
|
|
12
|
+
export { default as ColorPickerModal } from './components/ColorPickerModal';
|
|
13
|
+
export { default as useDataList } from './components/DataList';
|
|
14
|
+
export { default as DataTable } from './components/DataTable';
|
|
15
|
+
export { default as DateInput } from './components/DateInput';
|
|
16
|
+
export { default as DatePicker } from './components/DatePicker';
|
|
17
|
+
export { default as DescriptorField } from './components/DescriptorField';
|
|
18
|
+
export { default as DownloadButton } from './components/DownloadButton';
|
|
19
|
+
export { default as Draggable } from './components/Draggable';
|
|
20
|
+
export { default as DropdownButton } from './components/DropdownButton';
|
|
21
|
+
export { default as DropdownMenu } from './components/DropdownMenu';
|
|
22
|
+
export { default as EditModal } from './components/EditModal';
|
|
23
|
+
export { default as EditPage } from './components/EditPage';
|
|
24
|
+
export { default as EmbeddedList } from './components/EmbeddedList';
|
|
25
|
+
export { default as FileInputButton } from './components/FileInputButton';
|
|
26
|
+
export { default as FileUpload } from './components/FileUpload';
|
|
27
|
+
export { default as FileUploadModal } from './components/FileUploadModal';
|
|
28
|
+
export { default as FuzzyDate } from './components/FuzzyDate';
|
|
29
|
+
export { default as GoogleMap } from './components/GoogleMap';
|
|
30
|
+
export { default as GooglePlacesSearch } from './components/GooglePlacesSearch';
|
|
31
|
+
export { default as HorizontalCards } from './components/HorizontalCards';
|
|
32
|
+
export { default as ItemCollection } from './components/ItemCollection';
|
|
33
|
+
export { default as ItemList } from './components/ItemList';
|
|
34
|
+
export { default as Items } from './components/Items';
|
|
35
|
+
export { default as KeyboardField } from './components/KeyboardField';
|
|
36
|
+
export { default as LazyDocument } from './components/LazyDocument';
|
|
37
|
+
export { default as LazyImage } from './components/LazyImage';
|
|
38
|
+
export { default as LazyVideo } from './components/LazyVideo';
|
|
39
|
+
export { default as LinkButton } from './components/LinkButton';
|
|
40
|
+
export { default as ListFilters } from './components/ListFilters';
|
|
41
|
+
export { default as LinkLabel } from './components/LinkLabel';
|
|
42
|
+
export { default as useList } from './components/List';
|
|
43
|
+
export { default as ListLoader } from './components/ListLoader';
|
|
44
|
+
export { default as ListTable } from './components/ListTable';
|
|
45
|
+
export { default as LoginModal } from './components/LoginModal';
|
|
46
|
+
export { default as MasonryGrid } from './components/MasonryGrid';
|
|
47
|
+
export { default as MediaGallery } from './components/MediaGallery';
|
|
48
|
+
export { default as MediaGrid } from './components/MediaGrid';
|
|
49
|
+
export { default as MediaList } from './components/MediaList';
|
|
50
|
+
export { default as ModalDropdown } from './components/ModalDropdown';
|
|
51
|
+
export { default as NestedAccordion } from './components/NestedAccordion';
|
|
52
|
+
export { default as PlayButton } from './components/PlayButton';
|
|
53
|
+
export { default as PhotoViewer } from './components/PhotoViewer';
|
|
54
|
+
export { default as RemoteDropdown } from './components/RemoteDropdown';
|
|
55
|
+
export { default as SaveButton } from './components/SaveButton';
|
|
56
|
+
export { default as Section } from './components/Section';
|
|
57
|
+
export { default as Selectize } from './components/Selectize';
|
|
58
|
+
export { default as SelectizeHeader } from './components/SelectizeHeader';
|
|
59
|
+
export { default as TabbedModal } from './components/TabbedModal';
|
|
60
|
+
export { default as TabsMenu } from './components/TabsMenu';
|
|
61
|
+
export { default as TagsList } from './components/TagsList';
|
|
62
|
+
export { default as Thumbnail } from './components/Thumbnail';
|
|
63
|
+
export { default as Toaster } from './components/Toaster';
|
|
64
|
+
export { default as VideoFrameSelector } from './components/VideoFrameSelector';
|
|
65
|
+
export { default as VideoPlayer } from './components/VideoPlayer';
|
|
66
|
+
export { default as VideoPlayerButton } from './components/VideoPlayerButton';
|
|
67
|
+
export { default as ViewXML } from './components/ViewXML';
|
|
68
|
+
|
|
69
|
+
// Types
|
|
70
|
+
export type { EditPageProps } from './components/EditPage';
|
|
71
|
+
export type { FileUploadProps } from './components/FileUploadModal';
|
|
72
|
+
export type { Props as ListProps } from './components/List';
|
|
73
|
+
|
|
74
|
+
// Constants
|
|
75
|
+
export { SORT_ASCENDING, SORT_DESCENDING } from './components/DataList';
|
|
76
|
+
export { FilterTypes } from './components/ListFilters';
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import React, {
|
|
4
|
+
useCallback,
|
|
5
|
+
useEffect,
|
|
6
|
+
useMemo,
|
|
7
|
+
useRef,
|
|
8
|
+
type Element
|
|
9
|
+
} from 'react';
|
|
10
|
+
import _ from 'underscore';
|
|
11
|
+
import { Button, Checkbox, Dropdown } from 'semantic-ui-react';
|
|
12
|
+
import NestedAccordion from './NestedAccordion';
|
|
13
|
+
import useDataList, { SORT_ASCENDING } from './DataList';
|
|
14
|
+
import useList, { type Props as ListProps } from './List';
|
|
15
|
+
import './AccordionDataList.css';
|
|
16
|
+
|
|
17
|
+
type Sort = {
|
|
18
|
+
key: any,
|
|
19
|
+
value: any,
|
|
20
|
+
text: string,
|
|
21
|
+
direction?: string
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
type Props = ListProps & {
|
|
25
|
+
getChildItems: (items: ?Array<any>, item: any) => Array<any>,
|
|
26
|
+
getRootItems: (items: ?Array<any>) => Array<any>,
|
|
27
|
+
page: number,
|
|
28
|
+
onInit: () => void,
|
|
29
|
+
onSort: (column: string, direction: ?string, page?: number) => void,
|
|
30
|
+
selectable: boolean,
|
|
31
|
+
sort?: Array<Sort>,
|
|
32
|
+
sortColumn?: string,
|
|
33
|
+
sortDirection?: string
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
type AccordionProps = ListProps & {
|
|
37
|
+
getChildItems: (items: Array<any>, item: any) => Array<any>,
|
|
38
|
+
onItemToggle: (item: any) => void,
|
|
39
|
+
onRowSelect: (?any, ?any, ?any) => void,
|
|
40
|
+
renderItem: (item: any) => Element<any>,
|
|
41
|
+
rootItems: Array<any>,
|
|
42
|
+
selectable: boolean,
|
|
43
|
+
selectedRows: Array<{id: number}>,
|
|
44
|
+
showToggle: (item: any) => boolean
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const Accordion = useList((props: AccordionProps) => {
|
|
48
|
+
/**
|
|
49
|
+
* Renders the actions for the passed item.
|
|
50
|
+
*
|
|
51
|
+
* @type {(function(*=): (null|*))|*}
|
|
52
|
+
*/
|
|
53
|
+
const renderActions = useCallback((item) => {
|
|
54
|
+
const actions = _.filter(props.actions, (action) => !action.accept || action.accept(item));
|
|
55
|
+
|
|
56
|
+
if (_.isEmpty(actions)) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<Button.Group>
|
|
62
|
+
{ _.map(actions, (action, index) => (
|
|
63
|
+
<Button
|
|
64
|
+
basic
|
|
65
|
+
color={action.color}
|
|
66
|
+
icon={action.icon}
|
|
67
|
+
key={`${action.name}-${index}`}
|
|
68
|
+
onClick={action.onClick && action.onClick.bind(this, item)}
|
|
69
|
+
title={action.title}
|
|
70
|
+
/>
|
|
71
|
+
))}
|
|
72
|
+
</Button.Group>
|
|
73
|
+
);
|
|
74
|
+
}, [props.actions]);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Renders the checkbox for the passed item.
|
|
78
|
+
*
|
|
79
|
+
* @type {(function(*=): (null|*))|*}
|
|
80
|
+
*/
|
|
81
|
+
const renderCheckbox = useCallback((item) => {
|
|
82
|
+
if (!props.selectable) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<Checkbox
|
|
88
|
+
key={`select-checkbox-${item.id}`}
|
|
89
|
+
className='row-select-checkbox'
|
|
90
|
+
onClick={(e, el) => props.onRowSelect(el, item, e)}
|
|
91
|
+
checked={!!props.selectedRows.find((r) => r.id === item.id)}
|
|
92
|
+
/>
|
|
93
|
+
);
|
|
94
|
+
}, [props.onRowSelect, props.selectable, props.selectedRows]);
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<div
|
|
98
|
+
className={['accordion-data-list', props.className || ''].join(' ')}
|
|
99
|
+
>
|
|
100
|
+
<NestedAccordion
|
|
101
|
+
getChildItems={props.getChildItems}
|
|
102
|
+
onItemToggle={(item) => props.onItemToggle && props.onItemToggle(item)}
|
|
103
|
+
renderItem={(item) => props.renderItem(item)}
|
|
104
|
+
renderRight={(item) => (
|
|
105
|
+
<>
|
|
106
|
+
{ renderActions(item) }
|
|
107
|
+
{ renderCheckbox(item) }
|
|
108
|
+
</>
|
|
109
|
+
)}
|
|
110
|
+
rootItems={props.rootItems}
|
|
111
|
+
showToggle={(item) => props.showToggle(item)}
|
|
112
|
+
/>
|
|
113
|
+
</div>
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const AccordionDataList = (props: Props) => {
|
|
118
|
+
const rootItems = useMemo(() => props.getRootItems(props.items), [props.items]);
|
|
119
|
+
const getChildItems = useCallback((item) => props.getChildItems(props.items, item), [props.items]);
|
|
120
|
+
const sortDropdown = useRef<?typeof Dropdown>();
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Sets the current sort value.
|
|
124
|
+
*
|
|
125
|
+
* @type {unknown}
|
|
126
|
+
*/
|
|
127
|
+
const sortValue = useMemo(() => {
|
|
128
|
+
const sort = _.find(props.sort, { value: props.sortColumn });
|
|
129
|
+
return sort && sort.text;
|
|
130
|
+
}, [props.sort, props.sortColumn]);
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Toggles the sort property.
|
|
134
|
+
*
|
|
135
|
+
* @type {(function(*): void)|*}
|
|
136
|
+
*/
|
|
137
|
+
const onSort = useCallback((sort) => {
|
|
138
|
+
if (!props.onSort) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let sortDirection;
|
|
143
|
+
|
|
144
|
+
if (sort.value !== props.sortColumn) {
|
|
145
|
+
sortDirection = sort.direction;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
props.onSort(sort.value, sortDirection);
|
|
149
|
+
}, [props.onSort, props.sortColumn]);
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Renders the sort dropdown.
|
|
153
|
+
*
|
|
154
|
+
* @type {(function(): (null|*))|*}
|
|
155
|
+
*/
|
|
156
|
+
const renderSort = useCallback(() => {
|
|
157
|
+
if (_.isEmpty(props.sort)) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return (
|
|
162
|
+
<Button.Group
|
|
163
|
+
basic
|
|
164
|
+
style={{
|
|
165
|
+
fontSize: 'inherit'
|
|
166
|
+
}}
|
|
167
|
+
>
|
|
168
|
+
<Button
|
|
169
|
+
content={sortValue}
|
|
170
|
+
icon={props.sortDirection === SORT_ASCENDING ? 'sort alphabet up' : 'sort alphabet down'}
|
|
171
|
+
onClick={(e) => sortDropdown.current && sortDropdown.current.handleClick(e)}
|
|
172
|
+
/>
|
|
173
|
+
<Dropdown
|
|
174
|
+
className='button icon'
|
|
175
|
+
floating
|
|
176
|
+
options={_.map(props.sort, (sort) => ({
|
|
177
|
+
...sort,
|
|
178
|
+
onClick: () => onSort(sort)
|
|
179
|
+
}))}
|
|
180
|
+
ref={sortDropdown}
|
|
181
|
+
trigger={<></>}
|
|
182
|
+
value={props.sortColumn}
|
|
183
|
+
/>
|
|
184
|
+
</Button.Group>
|
|
185
|
+
);
|
|
186
|
+
}, [props.sort, props.sortColumn, props.sortDirection]);
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Sorts the first column on component mount. If no sort properties are defined, the onInit prop is called.
|
|
190
|
+
*/
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (_.isEmpty(props.sort)) {
|
|
193
|
+
return props.onInit();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const { page } = props;
|
|
197
|
+
let { sortColumn = '', sortDirection = SORT_ASCENDING } = props;
|
|
198
|
+
|
|
199
|
+
if (!sortColumn) {
|
|
200
|
+
const defaultSort = _.first(props.sort);
|
|
201
|
+
|
|
202
|
+
if (defaultSort) {
|
|
203
|
+
sortColumn = defaultSort.value;
|
|
204
|
+
|
|
205
|
+
if (defaultSort.direction) {
|
|
206
|
+
sortDirection = defaultSort.direction;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return props.onSort(sortColumn, sortDirection, page);
|
|
212
|
+
}, []);
|
|
213
|
+
|
|
214
|
+
return (
|
|
215
|
+
<Accordion
|
|
216
|
+
{...props}
|
|
217
|
+
renderListHeader={renderSort}
|
|
218
|
+
rootItems={rootItems}
|
|
219
|
+
getChildItems={getChildItems}
|
|
220
|
+
/>
|
|
221
|
+
);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
export default useDataList(AccordionDataList);
|