@solidstarters/solid-core-ui 1.1.38 → 1.1.41
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/dist/components/core/form/fields/SolidSelectionDynamicField.js +1 -1
- package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
- package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.js +4 -3
- package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
- package/dist/components/core/kanban/KanbanCard.d.ts +1 -1
- package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanCard.js +48 -25
- package/dist/components/core/kanban/KanbanCard.js.map +1 -1
- package/dist/components/core/kanban/KanbanColumn.d.ts +4 -1
- package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanColumn.js +6 -5
- package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.d.ts +2 -0
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +174 -125
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewFields.d.ts +11 -0
- package/dist/components/core/kanban/SolidKanbanViewFields.d.ts.map +1 -0
- package/dist/components/core/kanban/SolidKanbanViewFields.js +144 -0
- package/dist/components/core/kanban/SolidKanbanViewFields.js.map +1 -0
- package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts +2 -0
- package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -0
- package/dist/components/core/kanban/SolidManyToOneFilterElement.js +87 -0
- package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -0
- package/dist/components/core/kanban/SolidSelectionDynamicFilterElement.d.ts +2 -0
- package/dist/components/core/kanban/SolidSelectionDynamicFilterElement.d.ts.map +1 -0
- package/dist/components/core/kanban/SolidSelectionDynamicFilterElement.js +74 -0
- package/dist/components/core/kanban/SolidSelectionDynamicFilterElement.js.map +1 -0
- package/dist/components/core/kanban/SolidSelectionStaticFilterElement.d.ts +2 -0
- package/dist/components/core/kanban/SolidSelectionStaticFilterElement.d.ts.map +1 -0
- package/dist/components/core/kanban/SolidSelectionStaticFilterElement.js +21 -0
- package/dist/components/core/kanban/SolidSelectionStaticFilterElement.js.map +1 -0
- package/dist/components/core/kanban/SolidVarInputsFilterElement.d.ts +12 -0
- package/dist/components/core/kanban/SolidVarInputsFilterElement.d.ts.map +1 -0
- package/dist/components/core/kanban/SolidVarInputsFilterElement.js +82 -0
- package/dist/components/core/kanban/SolidVarInputsFilterElement.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidBigintKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidBigintKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidBigintKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidBigintKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidBooleanKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidBooleanKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidBooleanKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidBooleanKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidComputedKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidComputedKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidComputedKanbanField.js +22 -0
- package/dist/components/core/kanban/kanban-fields/SolidComputedKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidDateKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidDateKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidDateKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidDateKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidDecimalKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidDecimalKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidDecimalKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidDecimalKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidFloatKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidFloatKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidFloatKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidFloatKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidIdKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidIdKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidIdKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidIdKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidIntKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidIntKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidIntKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidIntKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidLongTextKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidLongTextKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidLongTextKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidLongTextKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +32 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +24 -0
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidRelationKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidRelationKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidRelationKanbanField.js +12 -0
- package/dist/components/core/kanban/kanban-fields/SolidRelationKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidRichTextKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidRichTextKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidRichTextKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidRichTextKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +16 -0
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidTimeKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidTimeKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidTimeKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidTimeKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidUuidKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/SolidUuidKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/SolidUuidKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/SolidUuidKanbanField.js.map +1 -0
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.d.ts +4 -0
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.d.ts.map +1 -0
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js +8 -0
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +28 -27
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListViewColumn.js +1 -1
- package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.d.ts +2 -0
- package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -0
- package/dist/components/core/list/SolidListViewConfigure.js +115 -0
- package/dist/components/core/list/SolidListViewConfigure.js.map +1 -0
- package/dist/components/core/list/columns/SolidShortTextColumn.d.ts +1 -1
- package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidShortTextColumn.js +48 -4
- package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.d.ts +2 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.d.ts.map +1 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js +10 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js.map +1 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldTextRenderModeWidget copy.d.ts +2 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldTextRenderModeWidget copy.d.ts.map +1 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldTextRenderModeWidget copy.js +7 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldTextRenderModeWidget copy.js.map +1 -0
- package/dist/components/core/model/FieldMetaDataForm.js +1 -6
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +4 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/globals.css +20 -1
- package/dist/resources/themes/solid-dark-purple/theme.css +1 -0
- package/dist/resources/themes/solid-light-purple/theme.css +5 -4
- package/package.json +2 -1
- package/src/components/core/form/fields/SolidSelectionDynamicField.tsx +1 -1
- package/src/components/core/kanban/KanbanBoard.tsx +9 -4
- package/src/components/core/kanban/KanbanCard.tsx +58 -31
- package/src/components/core/kanban/KanbanColumn.tsx +65 -59
- package/src/components/core/kanban/SolidKanbanView.tsx +195 -96
- package/src/components/core/kanban/SolidKanbanViewFields.tsx +163 -0
- package/src/components/core/kanban/SolidManyToOneFilterElement.tsx +59 -0
- package/src/components/core/kanban/SolidSelectionDynamicFilterElement.tsx +50 -0
- package/src/components/core/kanban/SolidSelectionStaticFilterElement.tsx +32 -0
- package/src/components/core/kanban/SolidVarInputsFilterElement.tsx +184 -0
- package/src/components/core/kanban/kanban-fields/SolidBigintKanbanField.tsx +9 -0
- package/src/components/core/kanban/kanban-fields/SolidBooleanKanbanField.tsx +13 -0
- package/src/components/core/kanban/kanban-fields/SolidComputedKanbanField.tsx +23 -0
- package/src/components/core/kanban/kanban-fields/SolidDateKanbanField.tsx +14 -0
- package/src/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.tsx +13 -0
- package/src/components/core/kanban/kanban-fields/SolidDecimalKanbanField.tsx +9 -0
- package/src/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.tsx +12 -0
- package/src/components/core/kanban/kanban-fields/SolidFloatKanbanField.tsx +9 -0
- package/src/components/core/kanban/kanban-fields/SolidIdKanbanField.tsx +14 -0
- package/src/components/core/kanban/kanban-fields/SolidIntKanbanField.tsx +13 -0
- package/src/components/core/kanban/kanban-fields/SolidLongTextKanbanField.tsx +9 -0
- package/src/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +68 -0
- package/src/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +60 -0
- package/src/components/core/kanban/kanban-fields/SolidRelationKanbanField.tsx +13 -0
- package/src/components/core/kanban/kanban-fields/SolidRichTextKanbanField.tsx +9 -0
- package/src/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.tsx +13 -0
- package/src/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.tsx +14 -0
- package/src/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +29 -0
- package/src/components/core/kanban/kanban-fields/SolidTimeKanbanField.tsx +12 -0
- package/src/components/core/kanban/kanban-fields/SolidUuidKanbanField.tsx +13 -0
- package/src/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +16 -0
- package/src/components/core/list/SolidListView.tsx +24 -20
- package/src/components/core/list/SolidListViewColumn.tsx +1 -1
- package/src/components/core/{common/SolidConfigureLayoutElement.tsx → list/SolidListViewConfigure.tsx} +118 -70
- package/src/components/core/list/columns/SolidShortTextColumn.tsx +45 -10
- package/src/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +19 -0
- package/src/components/core/list/widgets/SolidShortTextFieldTextRenderModeWidget copy.tsx +11 -0
- package/src/components/core/model/FieldMetaDataForm.tsx +6 -6
- package/src/helpers/registry.ts +4 -0
- package/src/index.ts +1 -1
- package/src/resources/globals.css +20 -1
- package/src/resources/themes/solid-dark-purple/theme.css +1 -0
- package/src/resources/themes/solid-light-purple/theme.css +5 -4
- package/src/types/solid-core.d.ts +4 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createSolidEntityApi } from "@/redux/api/solidEntityApi";
|
|
2
|
+
import { InputTypes } from "./SolidVarInputsFilterElement"
|
|
3
|
+
import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import qs from "qs";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export const SolidManyToOneFilterElement = ({ value, updateInputs, index, fieldMetadata }: any) => {
|
|
9
|
+
|
|
10
|
+
const entityApi = createSolidEntityApi(fieldMetadata.relationCoModelSingularName);
|
|
11
|
+
const { useLazyGetSolidEntitiesQuery } = entityApi;
|
|
12
|
+
const [triggerGetSolidEntities] = useLazyGetSolidEntitiesQuery();
|
|
13
|
+
|
|
14
|
+
const [autoCompleteItems, setAutoCompleteItems] = useState([]);
|
|
15
|
+
const autoCompleteSearch = async (event: AutoCompleteCompleteEvent) => {
|
|
16
|
+
|
|
17
|
+
// Get the list view layout & metadata first.
|
|
18
|
+
const queryData = {
|
|
19
|
+
offset: 0,
|
|
20
|
+
limit: 10,
|
|
21
|
+
filters: {
|
|
22
|
+
[fieldMetadata?.relationModel?.userKeyField?.name]: {
|
|
23
|
+
$containsi: event.query
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const autocompleteQs = qs.stringify(queryData, {
|
|
29
|
+
encodeValuesOnly: true,
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// TODO: do error handling here, possible errors like modelname is incorrect etc...
|
|
33
|
+
const autocompleteResponse = await triggerGetSolidEntities(autocompleteQs);
|
|
34
|
+
|
|
35
|
+
// TODO: if no data found then can we show no matching "entities", where entities can be replaced with the model plural name,
|
|
36
|
+
const autocompleteData = autocompleteResponse.data;
|
|
37
|
+
|
|
38
|
+
if (autocompleteData) {
|
|
39
|
+
const autoCompleteItems = autocompleteData.records.map((item: any) => {
|
|
40
|
+
return {
|
|
41
|
+
label: item[fieldMetadata?.relationModel?.userKeyField?.name],
|
|
42
|
+
value: item['id']
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
setAutoCompleteItems(autoCompleteItems);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<AutoComplete
|
|
51
|
+
field="label"
|
|
52
|
+
value={value}
|
|
53
|
+
suggestions={autoCompleteItems}
|
|
54
|
+
completeMethod={autoCompleteSearch}
|
|
55
|
+
onChange={(e) => updateInputs(index, e.value)}
|
|
56
|
+
className="solid-standard-autocomplete"
|
|
57
|
+
/>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useLazyGetSelectionDynamicValuesQuery } from "@/redux/api/fieldApi";
|
|
3
|
+
import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete";
|
|
4
|
+
import qs from "qs";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export const SolidSelectionDynamicFilterElement = ({ value, updateInputs, index, fieldMetadata }: any) => {
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
// selection dynamic specific code.
|
|
12
|
+
const [triggerGetSelectionDynamicValues] = useLazyGetSelectionDynamicValuesQuery();
|
|
13
|
+
const [selectionDynamicItems, setSelectionDynamicItems] = useState([]);
|
|
14
|
+
const selectionDynamicSearch = async (event: AutoCompleteCompleteEvent) => {
|
|
15
|
+
|
|
16
|
+
// Get the list view layout & metadata first.
|
|
17
|
+
const queryData = {
|
|
18
|
+
offset: 0,
|
|
19
|
+
limit: 10,
|
|
20
|
+
query: event.query,
|
|
21
|
+
id: fieldMetadata.id
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const sdQs = qs.stringify(queryData, {
|
|
25
|
+
encodeValuesOnly: true,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// TODO: do error handling here, possible errors like modelname is incorrect etc...
|
|
29
|
+
const sdResponse = await triggerGetSelectionDynamicValues(sdQs);
|
|
30
|
+
|
|
31
|
+
// TODO: if no data found then can we show no matching "entities", where entities can be replaced with the model plural name,
|
|
32
|
+
const sdData = sdResponse.data.data;
|
|
33
|
+
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
setSelectionDynamicItems(sdData);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
|
|
41
|
+
<AutoComplete
|
|
42
|
+
field="label"
|
|
43
|
+
value={value}
|
|
44
|
+
dropdown
|
|
45
|
+
className="w-full solid-standard-autocomplete"
|
|
46
|
+
suggestions={selectionDynamicItems}
|
|
47
|
+
completeMethod={selectionDynamicSearch}
|
|
48
|
+
onChange={(e) => updateInputs(index, e.value)} />
|
|
49
|
+
)
|
|
50
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { AutoComplete, AutoCompleteCompleteEvent } from "primereact/autocomplete";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export const SolidSelectionStaticFilterElement = ({ value, updateInputs, index, fieldMetadata }: any) => {
|
|
7
|
+
|
|
8
|
+
// selection dynamic specific code.
|
|
9
|
+
const [selectionStaticItems, setSelectionStaticItems] = useState([]);
|
|
10
|
+
const selectionStaticSearch = (event: AutoCompleteCompleteEvent) => {
|
|
11
|
+
const selectionStaticData = fieldMetadata.selectionStaticValues.map((i: string) => {
|
|
12
|
+
return {
|
|
13
|
+
label: i.split(":")[1],
|
|
14
|
+
value: i.split(":")[0]
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
const suggestionData = selectionStaticData.filter((t: any) => t.value.toLowerCase().startsWith(event.query.toLowerCase()));
|
|
18
|
+
setSelectionStaticItems(suggestionData)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
|
|
23
|
+
<AutoComplete
|
|
24
|
+
field="label"
|
|
25
|
+
value={value}
|
|
26
|
+
dropdown
|
|
27
|
+
className="w-full solid-standard-autocomplete"
|
|
28
|
+
suggestions={selectionStaticItems}
|
|
29
|
+
completeMethod={selectionStaticSearch}
|
|
30
|
+
onChange={(e) => updateInputs(index, e.value)} />
|
|
31
|
+
)
|
|
32
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Button } from "primereact/button";
|
|
3
|
+
import { Calendar } from "primereact/calendar";
|
|
4
|
+
import { InputNumber } from "primereact/inputnumber";
|
|
5
|
+
import { InputText } from "primereact/inputtext";
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
import { SolidManyToOneFilterElement } from "./SolidManyToOneFilterElement";
|
|
8
|
+
import { SolidSelectionDynamicFilterElement } from "./SolidSelectionDynamicFilterElement";
|
|
9
|
+
import { SolidSelectionStaticFilterElement } from "./SolidSelectionStaticFilterElement";
|
|
10
|
+
|
|
11
|
+
export enum InputTypes {
|
|
12
|
+
Date = 'Date',
|
|
13
|
+
DateTime = 'DateTime',
|
|
14
|
+
Time = 'Time',
|
|
15
|
+
Numeric = 'Numeric',
|
|
16
|
+
Text = 'Text',
|
|
17
|
+
SelectionStatic = 'SelectionStatic',
|
|
18
|
+
RelationManyToOne = 'RelationManyToOne',
|
|
19
|
+
SelectionDynamic = 'SelectionDynamic'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
// Based on numberOfInputs map the input filed and hide add and delete
|
|
24
|
+
export const SolidVarInputsFilterElement = ({ values, onChange, inputType = InputTypes.Text, numberOfInputs = null, solidKanbanViewMetaData, fieldMetadata }: any) => {
|
|
25
|
+
|
|
26
|
+
if (!values) {
|
|
27
|
+
values = numberOfInputs && numberOfInputs > 0 ? Array(numberOfInputs).fill('') : [''];
|
|
28
|
+
// values = [''];
|
|
29
|
+
} else {
|
|
30
|
+
if (values[0] == '') {
|
|
31
|
+
values = numberOfInputs && numberOfInputs > 0 ? Array(numberOfInputs).fill('') : [''];
|
|
32
|
+
} else {
|
|
33
|
+
|
|
34
|
+
values = values
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
// TODO: Ideally values will be an array, so we can spread them here instead of making a nested array.
|
|
41
|
+
const [inputs, setInputs] = useState([...values]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
setInputs([...values])
|
|
44
|
+
}, [numberOfInputs])
|
|
45
|
+
|
|
46
|
+
const updateInputs = (index: number, value: any) => {
|
|
47
|
+
const updatedSpecification = inputs.map((item, i) =>
|
|
48
|
+
i === index ? value : item
|
|
49
|
+
);
|
|
50
|
+
setInputs(updatedSpecification);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const addInput = () => {
|
|
54
|
+
setInputs([...inputs, '']);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const deleteInput = (index: number) => {
|
|
58
|
+
if (inputs.length > 1) {
|
|
59
|
+
const updatedRows = inputs.filter((_, rowIndex) => rowIndex !== index);
|
|
60
|
+
setInputs(updatedRows);
|
|
61
|
+
|
|
62
|
+
} else {
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
onChange(inputs)
|
|
68
|
+
}, [inputs])
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<div className="grid formgrid">
|
|
74
|
+
<div className="col-12">
|
|
75
|
+
<div className="flex flex-column gap-2">
|
|
76
|
+
{inputs && inputs.map((value: any, index: number) => (
|
|
77
|
+
|
|
78
|
+
<div key={index} className="flex align-items-center gap-2">
|
|
79
|
+
|
|
80
|
+
{inputType === InputTypes.Text &&
|
|
81
|
+
<InputText
|
|
82
|
+
value={value}
|
|
83
|
+
onChange={(e) => updateInputs(index, e.target.value)}
|
|
84
|
+
placeholder=""
|
|
85
|
+
className="p-inputtext-sm small-input w-full"
|
|
86
|
+
/>
|
|
87
|
+
}
|
|
88
|
+
{inputType === InputTypes.Numeric &&
|
|
89
|
+
<InputNumber
|
|
90
|
+
value={value}
|
|
91
|
+
onChange={(e) => updateInputs(index, e.value)}
|
|
92
|
+
placeholder=""
|
|
93
|
+
className="p-inputtext-sm small-input w-full"
|
|
94
|
+
/>
|
|
95
|
+
}
|
|
96
|
+
{inputType === InputTypes.Date &&
|
|
97
|
+
<Calendar
|
|
98
|
+
value={value}
|
|
99
|
+
onChange={(e) => updateInputs(index, e.target.value)}
|
|
100
|
+
dateFormat="mm/dd/yy"
|
|
101
|
+
placeholder="mm/dd/yyyy"
|
|
102
|
+
mask="99/99/9999"
|
|
103
|
+
/>
|
|
104
|
+
}
|
|
105
|
+
{inputType === InputTypes.DateTime &&
|
|
106
|
+
<Calendar
|
|
107
|
+
value={value}
|
|
108
|
+
onChange={(e) => updateInputs(index, e.target.value)}
|
|
109
|
+
dateFormat="mm/dd/yy"
|
|
110
|
+
placeholder="mm/dd/yyyy hh:mm"
|
|
111
|
+
mask="99/99/9999 99:99"
|
|
112
|
+
showTime
|
|
113
|
+
hourFormat="24"
|
|
114
|
+
/>
|
|
115
|
+
}
|
|
116
|
+
{inputType === InputTypes.Time &&
|
|
117
|
+
<Calendar
|
|
118
|
+
value={value}
|
|
119
|
+
onChange={(e) => updateInputs(index, e.target.value)}
|
|
120
|
+
placeholder="hh:mm"
|
|
121
|
+
mask="99:99"
|
|
122
|
+
timeOnly
|
|
123
|
+
hourFormat="24"
|
|
124
|
+
/>
|
|
125
|
+
}
|
|
126
|
+
{inputType === InputTypes.RelationManyToOne &&
|
|
127
|
+
<SolidManyToOneFilterElement
|
|
128
|
+
value={value}
|
|
129
|
+
index={index}
|
|
130
|
+
updateInputs={updateInputs}
|
|
131
|
+
fieldMetadata={fieldMetadata}
|
|
132
|
+
></SolidManyToOneFilterElement>
|
|
133
|
+
}
|
|
134
|
+
{inputType === InputTypes.SelectionDynamic &&
|
|
135
|
+
<SolidSelectionDynamicFilterElement
|
|
136
|
+
value={value}
|
|
137
|
+
index={index}
|
|
138
|
+
updateInputs={updateInputs}
|
|
139
|
+
fieldMetadata={fieldMetadata}
|
|
140
|
+
></SolidSelectionDynamicFilterElement>
|
|
141
|
+
}
|
|
142
|
+
{inputType === InputTypes.SelectionStatic &&
|
|
143
|
+
|
|
144
|
+
<SolidSelectionStaticFilterElement
|
|
145
|
+
value={value}
|
|
146
|
+
index={index}
|
|
147
|
+
updateInputs={updateInputs}
|
|
148
|
+
fieldMetadata={fieldMetadata}
|
|
149
|
+
></SolidSelectionStaticFilterElement>
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
{numberOfInputs === null &&
|
|
153
|
+
<>
|
|
154
|
+
{/* Plus Button to add a new row */}
|
|
155
|
+
< Button
|
|
156
|
+
icon="pi pi-plus"
|
|
157
|
+
size="small"
|
|
158
|
+
className="small-button"
|
|
159
|
+
onClick={addInput}
|
|
160
|
+
type="button"
|
|
161
|
+
/>
|
|
162
|
+
|
|
163
|
+
{/* Trash Button to delete the row */}
|
|
164
|
+
<Button
|
|
165
|
+
icon="pi pi-trash"
|
|
166
|
+
size="small"
|
|
167
|
+
className="small-button"
|
|
168
|
+
onClick={() => deleteInput(index)}
|
|
169
|
+
outlined
|
|
170
|
+
severity="danger"
|
|
171
|
+
type="button"
|
|
172
|
+
/>
|
|
173
|
+
</>
|
|
174
|
+
}
|
|
175
|
+
</div>
|
|
176
|
+
|
|
177
|
+
))}
|
|
178
|
+
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
)
|
|
184
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidIntKanbanField from './SolidIntKanbanField';
|
|
4
|
+
|
|
5
|
+
const SolidBigintKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
return SolidIntKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default SolidBigintKanbanField;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Checkbox } from "primereact/checkbox";
|
|
4
|
+
import { SolidKanbanViewFieldsParams } from "../SolidKanbanViewFields";
|
|
5
|
+
|
|
6
|
+
const SolidBooleanKanbanField = ({ solidKanbanViewMetaData, fieldMetadata,fieldLayout, data }: SolidKanbanViewFieldsParams) => {
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
10
|
+
);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default SolidBooleanKanbanField;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidDateKanbanField from './SolidDateKanbanField';
|
|
4
|
+
import SolidDatetimeKanbanField from './SolidDatetimeKanbanField';
|
|
5
|
+
import SolidIntKanbanField from './SolidIntKanbanField';
|
|
6
|
+
import SolidShortTextKanbanField from './SolidShortTextKanbanField';
|
|
7
|
+
|
|
8
|
+
const SolidComputedKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
9
|
+
if (['text', 'string'].includes(fieldMetadata.computedFieldValueType)) {
|
|
10
|
+
return SolidShortTextKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
11
|
+
}
|
|
12
|
+
if (['int', 'decimal'].includes(fieldMetadata.computedFieldValueType)) {
|
|
13
|
+
return SolidIntKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
14
|
+
}
|
|
15
|
+
if (fieldMetadata.computedFieldValueType === 'date') {
|
|
16
|
+
return SolidDateKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
17
|
+
}
|
|
18
|
+
if (fieldMetadata.computedFieldValueType === 'datetime') {
|
|
19
|
+
return SolidDatetimeKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default SolidComputedKanbanField;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Calendar } from 'primereact/calendar';
|
|
3
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
4
|
+
|
|
5
|
+
const SolidDateKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
9
|
+
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default SolidDateKanbanField;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
|
|
4
|
+
const SolidDatetimeKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
8
|
+
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default SolidDatetimeKanbanField;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidIntKanbanField from './SolidIntKanbanField';
|
|
4
|
+
|
|
5
|
+
const SolidDecimalKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
return SolidIntKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default SolidDecimalKanbanField;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
|
|
4
|
+
const SolidExternalIdKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default SolidExternalIdKanbanField;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidIntKanbanField from './SolidIntKanbanField';
|
|
4
|
+
|
|
5
|
+
const SolidFloatKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
return SolidIntKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default SolidFloatKanbanField;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
|
|
4
|
+
const SolidIdKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default SolidIdKanbanField;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import { InputText } from 'primereact/inputtext';
|
|
4
|
+
|
|
5
|
+
const SolidIntKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default SolidIntKanbanField;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidShortTextKanbanField from './SolidShortTextKanbanField';
|
|
4
|
+
|
|
5
|
+
const SolidLongTextKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
return SolidShortTextKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default SolidLongTextKanbanField;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { Column } from "primereact/column";
|
|
4
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
5
|
+
import { Dialog } from 'primereact/dialog';
|
|
6
|
+
import { Document, Page, pdfjs } from "react-pdf";
|
|
7
|
+
|
|
8
|
+
pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
const SolidMediaMultipleKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout, data, setLightboxUrls, setOpenLightbox }: SolidKanbanViewFieldsParams) => {
|
|
12
|
+
// const filterable = column.attrs.filterable;
|
|
13
|
+
const [visible, setVisible] = useState(false);
|
|
14
|
+
const header = fieldMetadata.displayName;
|
|
15
|
+
// const fileData = data && data._media[fieldMetadata.name].length > 0 && data._media[fieldMetadata.name].map((i: any) => {
|
|
16
|
+
// const fileData = { mimeType: i.mimeType, url: i._full_url }
|
|
17
|
+
// return fileData
|
|
18
|
+
// }
|
|
19
|
+
// );
|
|
20
|
+
const fileData = [
|
|
21
|
+
{ mimeType: "image/jpeg", url: "https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png" },
|
|
22
|
+
{ mimeType: "application/pdf", url: "http://localhost:8080/media-files-storage/Holiday List 2025.pdf" },
|
|
23
|
+
{ mimeType: "application/vnd.ms-excel", url: "http://localhost:8080/media-files-storage/PF Form.xls" }
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<>
|
|
28
|
+
{fileData && fileData.map((file: any) => {
|
|
29
|
+
return (
|
|
30
|
+
<>
|
|
31
|
+
<div>
|
|
32
|
+
{file.mimeType.startsWith("image/") &&
|
|
33
|
+
<img src={file.url}
|
|
34
|
+
onClick={(event) => {
|
|
35
|
+
event.stopPropagation();
|
|
36
|
+
setLightboxUrls([{ src: file.url }]);
|
|
37
|
+
setOpenLightbox(true);
|
|
38
|
+
}}
|
|
39
|
+
className='image-preview'
|
|
40
|
+
alt={header} />}
|
|
41
|
+
{/* Render PDF - Open Lightbox on Click */}
|
|
42
|
+
{file.mimeType.includes("pdf") && (
|
|
43
|
+
<>
|
|
44
|
+
<i className="pi pi-file-pdf" style={{ fontSize: "24px", color: "red", cursor: "pointer" }} onClick={() => setVisible(true)}></i>
|
|
45
|
+
<Dialog header="PDF Preview" visible={visible} style={{ width: "" }} onHide={() => setVisible(false)} modal>
|
|
46
|
+
<Document file={file.url}>
|
|
47
|
+
<Page pageNumber={1} />
|
|
48
|
+
</Document>
|
|
49
|
+
</Dialog>
|
|
50
|
+
</>
|
|
51
|
+
)}
|
|
52
|
+
{/* Excel or Other Files - Show Download Icon */}
|
|
53
|
+
{(file.mimeType.includes("excel") || file.mimeType.includes("spreadsheet")) && (
|
|
54
|
+
<a href={file.url} download target="_blank" rel="noopener noreferrer">
|
|
55
|
+
<i className="pi pi-file-excel">Download</i>
|
|
56
|
+
</a>
|
|
57
|
+
)}
|
|
58
|
+
</div>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
)}
|
|
63
|
+
</>
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default SolidMediaMultipleKanbanField;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { Column, ColumnFilterElementTemplateOptions } from "primereact/column";
|
|
4
|
+
import { InputTypes, SolidVarInputsFilterElement } from "../SolidVarInputsFilterElement";
|
|
5
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
6
|
+
import { FormEvent } from "primereact/ts-helpers";
|
|
7
|
+
import { FilterMatchMode } from 'primereact/api';
|
|
8
|
+
import { Document, Page, pdfjs } from "react-pdf";
|
|
9
|
+
import { Dialog } from "primereact/dialog";
|
|
10
|
+
|
|
11
|
+
pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
const SolidMediaSingleKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout, data, setLightboxUrls, setOpenLightbox }: SolidKanbanViewFieldsParams) => {
|
|
15
|
+
const [visible, setVisible] = useState(false);
|
|
16
|
+
const header = fieldMetadata.displayName;
|
|
17
|
+
const url = data && data._media && data._media[fieldMetadata.name].length > 0 && data._media[fieldMetadata.name].map((i: any) => i._full_url)[0];
|
|
18
|
+
const mimeType = data && data._media && data._media[fieldMetadata.name].length > 0 && data._media[fieldMetadata.name].map((i: any) => i.mimeType)[0];
|
|
19
|
+
// const mimeType: string = "excel";
|
|
20
|
+
// const url = "http://localhost:8080/media-files-storage/Holiday List 2025.pdf";
|
|
21
|
+
// const url = "http://localhost:8080/media-files-storage/PF Form.xls";
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
{mimeType && mimeType.includes("image/") &&
|
|
28
|
+
<img className='image-preview'
|
|
29
|
+
src={url}
|
|
30
|
+
onClick={(event) => {
|
|
31
|
+
event.stopPropagation();
|
|
32
|
+
setLightboxUrls([{ src: url }]);
|
|
33
|
+
setOpenLightbox(true);
|
|
34
|
+
}}
|
|
35
|
+
alt={header} />}
|
|
36
|
+
|
|
37
|
+
{/* Render PDF - Open Lightbox on Click */}
|
|
38
|
+
{mimeType && mimeType.includes("pdf") && (
|
|
39
|
+
<>
|
|
40
|
+
<i className="pi pi-file-pdf" style={{ fontSize: "24px", color: "red", cursor: "pointer" }} onClick={() => setVisible(true)}></i>
|
|
41
|
+
<Dialog header="PDF Preview" visible={visible} style={{ width: "" }} onHide={() => setVisible(false)} modal>
|
|
42
|
+
<Document file={url}>
|
|
43
|
+
<Page pageNumber={1} />
|
|
44
|
+
</Document>
|
|
45
|
+
</Dialog>
|
|
46
|
+
</>
|
|
47
|
+
)}
|
|
48
|
+
{/* Excel or Other Files - Show Download Icon */}
|
|
49
|
+
{mimeType && (mimeType.includes("excel") || mimeType.includes("spreadsheet")) && (
|
|
50
|
+
<a href={url} download target="_blank" rel="noopener noreferrer">
|
|
51
|
+
<i className="pi pi-file-excel">Download</i>
|
|
52
|
+
</a>
|
|
53
|
+
)}
|
|
54
|
+
|
|
55
|
+
</>
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export default SolidMediaSingleKanbanField;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidRelationManyToOneKanbanField from './relations/SolidRelationManyToOneKanbanField';
|
|
4
|
+
|
|
5
|
+
const SolidRelationKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
if (fieldMetadata.relationType === 'many-to-one') {
|
|
7
|
+
return SolidRelationManyToOneKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
8
|
+
}
|
|
9
|
+
// TODO: Support one-to-many
|
|
10
|
+
// TODO: Support many-to-many
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default SolidRelationKanbanField;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
import SolidShortTextKanbanField from './SolidShortTextKanbanField';
|
|
4
|
+
|
|
5
|
+
const SolidRichTextKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
6
|
+
return SolidShortTextKanbanField({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data });
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default SolidRichTextKanbanField;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SolidKanbanViewFieldsParams } from '../SolidKanbanViewFields';
|
|
3
|
+
|
|
4
|
+
const SolidSelectionDynamicKanbanField = ({ solidKanbanViewMetaData, fieldMetadata, fieldLayout,data }: SolidKanbanViewFieldsParams) => {
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<p>{data && data[fieldMetadata.name] ? `${data[fieldMetadata.name]}`: ""}</p>
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default SolidSelectionDynamicKanbanField;
|