@digigov/form 2.0.9 → 2.0.10
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/CHANGELOG.md +11 -2
- package/FieldArray/BaseFieldArray.d.ts +3 -2
- package/FieldArray/BaseFieldArray.js +26 -4
- package/FieldArray/DeleteConfirmationModal.d.ts +8 -0
- package/FieldArray/DeleteConfirmationModal.js +29 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js +3 -1
- package/FieldArray/FormDialog/ArrayDisplay/index.d.ts +2 -1
- package/FieldArray/FormDialog/ArrayDisplay/index.js +39 -6
- package/FieldArray/FormDialog/index.d.ts +1 -0
- package/FieldArray/FormDialog/index.js +3 -2
- package/FieldArray/index.js +2 -0
- package/index.js +1 -1
- package/lazy.d.ts +5 -35
- package/lazy.js +6 -3
- package/package.json +4 -4
- package/registry.d.ts +4 -3
- package/registry.js +8 -6
- package/src/FieldArray/BaseFieldArray.tsx +34 -3
- package/src/FieldArray/DeleteConfirmationModal.tsx +57 -0
- package/src/FieldArray/FieldArray.stories.js +1 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.js +1 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.tsx +3 -1
- package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/WithDeleteConfirmation.tsx +94 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/index.test.tsx +30 -26
- package/src/FieldArray/FormDialog/ArrayDisplay/index.tsx +70 -36
- package/src/FieldArray/FormDialog/index.tsx +3 -0
- package/src/FieldArray/__stories__/WithDeleteConfirmation.tsx +190 -0
- package/src/FieldArray/index.spec.tsx +42 -0
- package/src/FieldArray/index.test.tsx +27 -23
- package/src/FieldArray/index.tsx +2 -1
- package/src/lazy.ts +2 -1
- package/src/registry.ts +8 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# Change Log - @digigov/form
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
<!-- This log was last generated on Thu, 05 Mar 2026 17:08:26 GMT and should not be manually modified. -->
|
|
4
|
+
|
|
5
|
+
<!-- Start content -->
|
|
6
|
+
|
|
7
|
+
## 2.0.10
|
|
8
|
+
|
|
9
|
+
Thu, 05 Mar 2026 17:08:26 GMT
|
|
10
|
+
|
|
11
|
+
### Patches
|
|
12
|
+
|
|
13
|
+
- refactor ArrayDisplay and ArrayItemDisplay add deleteConfirmation prop (gpapadakis@admin.grnet.gr)
|
|
4
14
|
|
|
5
15
|
## 2.0.8
|
|
6
16
|
Wed, 11 Feb 2026 14:46:37 GMT
|
|
@@ -726,4 +736,3 @@ _Version update only_
|
|
|
726
736
|
Thu, 22 Apr 2021 12:56:25 GMT
|
|
727
737
|
|
|
728
738
|
_Initial release_
|
|
729
|
-
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { FieldArrayProps } from './index.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
export declare const BaseFieldArray: React.ForwardRefExoticComponent<Omit<FieldArrayProps, "reset" | "resetField" | "setValue" | "clearErrors" | "trigger" | "registerFieldFocus"> & {
|
|
4
|
+
deleteConfirmation?: boolean;
|
|
5
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
5
6
|
export default BaseFieldArray;
|
|
@@ -1,15 +1,31 @@
|
|
|
1
|
-
import react from "react";
|
|
1
|
+
import react, { useId, useRef } from "react";
|
|
2
2
|
import { useFieldArray } from "react-hook-form";
|
|
3
|
+
import DeleteConfirmationModal from "./DeleteConfirmationModal.js";
|
|
3
4
|
import { FieldObject } from "../FieldObject/index.js";
|
|
4
5
|
import { Fieldset, FieldsetLabel } from "../Fieldset/index.js";
|
|
6
|
+
import { useModal } from "@digigov/ui/index.js";
|
|
5
7
|
import { Card } from "@digigov/ui/content/Card/index.js";
|
|
6
8
|
import { Button } from "@digigov/ui/form/Button/index.js";
|
|
7
|
-
const BaseFieldArray_BaseFieldArray = /*#__PURE__*/ react.forwardRef(({ name, register, control, formState, error, getValues, Field, ...customField }, ref)=>{
|
|
9
|
+
const BaseFieldArray_BaseFieldArray = /*#__PURE__*/ react.forwardRef(({ name, register, control, formState, error, getValues, Field, deleteConfirmation, ...customField }, ref)=>{
|
|
8
10
|
const { append, remove } = useFieldArray({
|
|
9
11
|
control,
|
|
10
12
|
name
|
|
11
13
|
});
|
|
12
14
|
const fields = getValues(name) || [];
|
|
15
|
+
const { registerModal, open, ...modalProps } = useModal();
|
|
16
|
+
const confirmationModalId = useId();
|
|
17
|
+
const indexOfItemToDelete = useRef(null);
|
|
18
|
+
const handleRemoveClick = react.useCallback((index)=>{
|
|
19
|
+
if (deleteConfirmation) {
|
|
20
|
+
indexOfItemToDelete.current = index;
|
|
21
|
+
open(confirmationModalId);
|
|
22
|
+
} else remove(index);
|
|
23
|
+
}, [
|
|
24
|
+
deleteConfirmation,
|
|
25
|
+
open,
|
|
26
|
+
remove,
|
|
27
|
+
confirmationModalId
|
|
28
|
+
]);
|
|
13
29
|
return /*#__PURE__*/ react.createElement(react.Fragment, null, fields.map((field, index)=>/*#__PURE__*/ react.createElement(Card, {
|
|
14
30
|
variant: customField.extra?.border ? 'border' : 'divider',
|
|
15
31
|
key: field.id || index
|
|
@@ -26,7 +42,9 @@ const BaseFieldArray_BaseFieldArray = /*#__PURE__*/ react.forwardRef(({ name, re
|
|
|
26
42
|
variant: customField.extra?.label.object?.deleteButtonVariant,
|
|
27
43
|
type: "button",
|
|
28
44
|
color: "warning",
|
|
29
|
-
onClick: ()=>
|
|
45
|
+
onClick: ()=>{
|
|
46
|
+
handleRemoveClick(index);
|
|
47
|
+
},
|
|
30
48
|
disabled: !customField?.editable
|
|
31
49
|
}, customField.extra?.label.object?.delete)))), customField.editable && /*#__PURE__*/ react.createElement(Button, {
|
|
32
50
|
ref: ref,
|
|
@@ -39,7 +57,11 @@ const BaseFieldArray_BaseFieldArray = /*#__PURE__*/ react.forwardRef(({ name, re
|
|
|
39
57
|
append({});
|
|
40
58
|
},
|
|
41
59
|
disabled: !customField?.editable
|
|
42
|
-
}, customField.extra?.label.object?.add)
|
|
60
|
+
}, customField.extra?.label.object?.add), /*#__PURE__*/ react.createElement(DeleteConfirmationModal, {
|
|
61
|
+
...modalProps,
|
|
62
|
+
...registerModal(confirmationModalId),
|
|
63
|
+
remove: ()=>null !== indexOfItemToDelete.current ? remove(indexOfItemToDelete.current) : ()=>{}
|
|
64
|
+
}));
|
|
43
65
|
});
|
|
44
66
|
BaseFieldArray_BaseFieldArray.displayName = 'BaseFieldArray';
|
|
45
67
|
const BaseFieldArray = BaseFieldArray_BaseFieldArray;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ModalProps } from '@digigov/ui';
|
|
3
|
+
export interface DeleteConfirmationModalProps extends ModalProps {
|
|
4
|
+
remove: () => void;
|
|
5
|
+
close: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const DeleteConfirmationModal: ({ remove, close, ...props }: DeleteConfirmationModalProps) => React.JSX.Element;
|
|
8
|
+
export default DeleteConfirmationModal;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import react, { useId } from "react";
|
|
2
|
+
import { Button, Modal, ModalAction, ModalContent, ModalHeading, Paragraph } from "@digigov/ui/index.js";
|
|
3
|
+
const DeleteConfirmationModal_DeleteConfirmationModal = ({ remove, close, ...props })=>{
|
|
4
|
+
const headingId = useId();
|
|
5
|
+
return /*#__PURE__*/ react.createElement(Modal, {
|
|
6
|
+
...props,
|
|
7
|
+
"aria-labelledby": headingId
|
|
8
|
+
}, /*#__PURE__*/ react.createElement(ModalHeading, {
|
|
9
|
+
id: headingId
|
|
10
|
+
}, "Επιβεβαίωση διαγραφής"), /*#__PURE__*/ react.createElement(ModalContent, null, /*#__PURE__*/ react.createElement(Paragraph, {
|
|
11
|
+
margin: 0
|
|
12
|
+
}, "Είστε σίγουροι ότι θέλετε να διαγράψετε την εγγραφή;")), /*#__PURE__*/ react.createElement(ModalAction, null, /*#__PURE__*/ react.createElement(Button, {
|
|
13
|
+
color: "warning",
|
|
14
|
+
onClick: (e)=>{
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
remove();
|
|
17
|
+
close();
|
|
18
|
+
}
|
|
19
|
+
}, "Διαγραφή"), /*#__PURE__*/ react.createElement(Button, {
|
|
20
|
+
variant: "link",
|
|
21
|
+
type: "button",
|
|
22
|
+
onClick: (e)=>{
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
close();
|
|
25
|
+
}
|
|
26
|
+
}, "Ακύρωση")));
|
|
27
|
+
};
|
|
28
|
+
const DeleteConfirmationModal = DeleteConfirmationModal_DeleteConfirmationModal;
|
|
29
|
+
export { DeleteConfirmationModal_DeleteConfirmationModal as DeleteConfirmationModal, DeleteConfirmationModal as default };
|
|
@@ -72,7 +72,9 @@ const ArrayItemDisplay = ({ name, data, edit, remove, disabledEdit, disabledDele
|
|
|
72
72
|
}, "Επεξεργασία"), true !== disabledDelete && /*#__PURE__*/ react.createElement(Button, {
|
|
73
73
|
variant: "link",
|
|
74
74
|
type: "button",
|
|
75
|
-
onClick: ()=>
|
|
75
|
+
onClick: ()=>{
|
|
76
|
+
remove(name);
|
|
77
|
+
}
|
|
76
78
|
}, "Διαγραφή")), sortable && /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(SectionBreak, null), sortable && !disabled && !(isFirst && isLast) && /*#__PURE__*/ react.createElement(NormalText, {
|
|
77
79
|
mb: 0
|
|
78
80
|
}, "Μετακίνηση", ' ', !isFirst && /*#__PURE__*/ react.createElement(react.Fragment, null, "προς τα", ' ', /*#__PURE__*/ react.createElement(Button, {
|
|
@@ -9,7 +9,8 @@ export interface ArrayDisplayProps {
|
|
|
9
9
|
onRemove: (index: number) => void;
|
|
10
10
|
move: UseFieldArrayMove;
|
|
11
11
|
sortable: boolean;
|
|
12
|
+
deleteConfirmation?: boolean;
|
|
12
13
|
error?: any;
|
|
13
14
|
}
|
|
14
|
-
export declare const ArrayDisplay: ({ fieldArrayName, fieldArrayValues, ofField, customField, onEdit, onRemove, move, sortable, error, }: ArrayDisplayProps) => React.JSX.Element;
|
|
15
|
+
export declare const ArrayDisplay: ({ fieldArrayName, fieldArrayValues, ofField, customField, onEdit, onRemove, move, sortable, deleteConfirmation, error, }: ArrayDisplayProps) => React.JSX.Element;
|
|
15
16
|
export default ArrayDisplay;
|
|
@@ -1,7 +1,27 @@
|
|
|
1
|
-
import react from "react";
|
|
1
|
+
import react, { useId, useState } from "react";
|
|
2
|
+
import DeleteConfirmationModal from "../../DeleteConfirmationModal.js";
|
|
2
3
|
import { ArrayContainerDisplay } from "./ArrayContainerDisplay.js";
|
|
3
4
|
import { ArrayItemDisplay } from "./ArrayItemDisplay.js";
|
|
4
|
-
|
|
5
|
+
import { omit } from "../../../utils.js";
|
|
6
|
+
import { useModal } from "@digigov/ui/index.js";
|
|
7
|
+
const ArrayDisplay_ArrayDisplay = ({ fieldArrayName, fieldArrayValues, ofField, customField, onEdit, onRemove, move, sortable, deleteConfirmation, error })=>{
|
|
8
|
+
const confirmationModalId = useId();
|
|
9
|
+
const [removeCurrentModal, setRemoveCurrentModal] = useState(-1);
|
|
10
|
+
const { registerModal, open, ...modalProps } = useModal();
|
|
11
|
+
const handleRemoveClick = react.useCallback((index)=>{
|
|
12
|
+
const needsConfirmation = deleteConfirmation || customField.extra?.deleteConfirmation;
|
|
13
|
+
if (needsConfirmation) {
|
|
14
|
+
setRemoveCurrentModal(index);
|
|
15
|
+
open(confirmationModalId);
|
|
16
|
+
} else onRemove(index);
|
|
17
|
+
}, [
|
|
18
|
+
deleteConfirmation,
|
|
19
|
+
customField.extra,
|
|
20
|
+
open,
|
|
21
|
+
onRemove,
|
|
22
|
+
confirmationModalId
|
|
23
|
+
]);
|
|
24
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(ArrayContainerDisplay, {
|
|
5
25
|
fieldArrayValues: fieldArrayValues,
|
|
6
26
|
ofField: ofField,
|
|
7
27
|
customField: customField
|
|
@@ -17,7 +37,7 @@ const ArrayDisplay = ({ fieldArrayName, fieldArrayValues, ofField, customField,
|
|
|
17
37
|
stackProps: customField?.extra?.stackProps,
|
|
18
38
|
wordBreak: customField?.extra?.wordBreak,
|
|
19
39
|
valueDisplay: customField?.extra?.valueDisplay,
|
|
20
|
-
remove: ()=>
|
|
40
|
+
remove: ()=>handleRemoveClick(index),
|
|
21
41
|
border: customField.extra?.border,
|
|
22
42
|
move: move,
|
|
23
43
|
sortable: sortable,
|
|
@@ -27,6 +47,19 @@ const ArrayDisplay = ({ fieldArrayName, fieldArrayValues, ofField, customField,
|
|
|
27
47
|
fieldArrayValues: fieldArrayValues,
|
|
28
48
|
ofField: ofField,
|
|
29
49
|
customField: customField
|
|
30
|
-
})))
|
|
31
|
-
|
|
32
|
-
|
|
50
|
+
}))), /*#__PURE__*/ react.createElement(DeleteConfirmationModal, {
|
|
51
|
+
...omit(modalProps, [
|
|
52
|
+
'registerAction',
|
|
53
|
+
'currentOpen'
|
|
54
|
+
]),
|
|
55
|
+
...registerModal(confirmationModalId),
|
|
56
|
+
remove: ()=>{
|
|
57
|
+
if (-1 !== removeCurrentModal) {
|
|
58
|
+
onRemove(removeCurrentModal);
|
|
59
|
+
setRemoveCurrentModal(-1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
};
|
|
64
|
+
const ArrayDisplay = ArrayDisplay_ArrayDisplay;
|
|
65
|
+
export { ArrayDisplay_ArrayDisplay as ArrayDisplay, ArrayDisplay as default };
|
|
@@ -14,6 +14,7 @@ export interface FormDialogProps extends FieldProps {
|
|
|
14
14
|
resetField?: UseFormReturn['resetField'];
|
|
15
15
|
sortable: boolean;
|
|
16
16
|
Field: React.FC<FieldProps>;
|
|
17
|
+
deleteConfirmation?: boolean;
|
|
17
18
|
}
|
|
18
19
|
export declare const FormDialog: React.ForwardRefExoticComponent<FormDialogProps & React.RefAttributes<HTMLButtonElement>>;
|
|
19
20
|
export default FormDialog;
|
|
@@ -6,7 +6,7 @@ import { useFormContext } from "../../FormContext.js";
|
|
|
6
6
|
import { useModal } from "@digigov/ui/app/Modal/index.js";
|
|
7
7
|
import { Button } from "@digigov/ui/form/Button/index.js";
|
|
8
8
|
import { Hint } from "@digigov/ui/typography/Hint/index.js";
|
|
9
|
-
const FormDialog = /*#__PURE__*/ react.forwardRef(({ name: fieldArrayName, control, error, getValues, Field, sortable, ...customField }, ref)=>{
|
|
9
|
+
const FormDialog = /*#__PURE__*/ react.forwardRef(({ name: fieldArrayName, control, error, getValues, Field, sortable, deleteConfirmation = false, ...customField }, ref)=>{
|
|
10
10
|
const [isAppending, setIsAppending] = useState(false);
|
|
11
11
|
const [editingIndex, setEditingIndex] = useState(0);
|
|
12
12
|
const { fields, append, remove, update, move } = useFieldArray({
|
|
@@ -181,7 +181,8 @@ const FormDialog = /*#__PURE__*/ react.forwardRef(({ name: fieldArrayName, contr
|
|
|
181
181
|
onRemove: handleRemove,
|
|
182
182
|
move: handleMove,
|
|
183
183
|
sortable: sortable,
|
|
184
|
-
error: error
|
|
184
|
+
error: error,
|
|
185
|
+
deleteConfirmation: deleteConfirmation
|
|
185
186
|
}), customField.extra?.editVariant !== 'display' && !customField.extra?.noAdd && /*#__PURE__*/ react.createElement("div", {
|
|
186
187
|
className: customField.extra?.label.object?.addButtonVariant === 'link' ? 'px-2 py-2 bg-gray-200 border-t border-b border-gray-400' : '',
|
|
187
188
|
...customField?.extra?.label.object?.buttonGroup
|
package/FieldArray/index.js
CHANGED
|
@@ -49,6 +49,7 @@ const FieldArray = ({ name, trigger, register, clearErrors, control, formState,
|
|
|
49
49
|
reset: reset,
|
|
50
50
|
resetField: resetField,
|
|
51
51
|
sortable: customField.extra.sortable,
|
|
52
|
+
deleteConfirmation: customField.extra?.deleteConfirmation,
|
|
52
53
|
...customField
|
|
53
54
|
}) : /*#__PURE__*/ react.createElement(BaseFieldArray, {
|
|
54
55
|
ref: buttonRef,
|
|
@@ -59,6 +60,7 @@ const FieldArray = ({ name, trigger, register, clearErrors, control, formState,
|
|
|
59
60
|
error: error,
|
|
60
61
|
getValues: getValues,
|
|
61
62
|
Field: Field,
|
|
63
|
+
deleteConfirmation: customField.extra?.deleteConfirmation,
|
|
62
64
|
...customField
|
|
63
65
|
}));
|
|
64
66
|
};
|
package/index.js
CHANGED
package/lazy.d.ts
CHANGED
|
@@ -8,42 +8,12 @@ declare const _default: {
|
|
|
8
8
|
FieldBase: import("react").LazyExoticComponent<import("react").FC<import("./internal.js").FieldBaseProps>>;
|
|
9
9
|
FieldBaseContainer: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<import("./internal.js").FieldContainerProps & import("react").RefAttributes<HTMLFieldSetElement>>>;
|
|
10
10
|
FieldConditional: import("react").LazyExoticComponent<import("react").FC<import("./internal.js").FieldConditionalProps>>;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
children?: React.ReactNode;
|
|
15
|
-
key: string;
|
|
16
|
-
disabled?: boolean | undefined;
|
|
17
|
-
autoComplete?: string | undefined;
|
|
18
|
-
maxLength?: number | undefined;
|
|
19
|
-
error?: import("react-hook-form").ErrorOption | undefined;
|
|
20
|
-
width?: string | undefined;
|
|
21
|
-
max?: number | undefined;
|
|
22
|
-
min?: number | undefined;
|
|
23
|
-
name: string;
|
|
24
|
-
placeholder?: string | undefined;
|
|
25
|
-
required?: boolean | undefined;
|
|
26
|
-
type?: ("int" | "string" | "text" | "boolean" | "email" | "uuid4" | "choice:multiple" | "choice:single" | "mobile_phone" | "date" | "datetime" | "otp" | "afm" | "amka" | "iban" | "file" | "rate" | "image" | "postal_code" | "phone_number" | "array" | "object") | undefined;
|
|
27
|
-
variant?: ("inline" | "dialog") | undefined;
|
|
28
|
-
layout?: Record<string, import("@digigov/ui/src/index.js").GridProps["xs"] | import("@digigov/ui/src/index.js").GridProps["sm"] | import("@digigov/ui/src/index.js").GridProps["md"] | import("@digigov/ui/src/index.js").GridProps["lg"] | import("@digigov/ui/src/index.js").GridProps["xl"]> | undefined;
|
|
29
|
-
Field: React.FC<import("./internal.js").FieldProps>;
|
|
30
|
-
extra?: Record<string, any> | undefined;
|
|
31
|
-
maxWidth?: string | undefined;
|
|
32
|
-
register: import("react-hook-form").UseFormReturn["register"];
|
|
33
|
-
control: import("react-hook-form").UseFormReturn["control"];
|
|
34
|
-
getValues: import("react-hook-form").UseFormReturn["getValues"];
|
|
35
|
-
component?: any;
|
|
36
|
-
condition?: Record<string, import("./internal.js").FieldCondition> | undefined;
|
|
37
|
-
controlled?: boolean | undefined;
|
|
38
|
-
editable?: boolean | undefined;
|
|
39
|
-
enabled?: boolean | undefined;
|
|
40
|
-
validators?: import("./validators/types.js").ValidatorSchema[] | undefined;
|
|
41
|
-
wrapper?: ("label" | "fieldset") | undefined;
|
|
42
|
-
maxHeight?: string | undefined;
|
|
43
|
-
formState: import("react-hook-form").UseFormReturn["formState"];
|
|
11
|
+
FieldObject: import("react").LazyExoticComponent<import("react").FC<import("./FieldObject/index.js").FieldObjectProps>>;
|
|
12
|
+
BaseFieldArray: import("react").LazyExoticComponent<import("react").ForwardRefExoticComponent<Omit<import("./FieldArray/index.js").FieldArrayProps, "reset" | "resetField" | "setValue" | "clearErrors" | "trigger" | "registerFieldFocus"> & {
|
|
13
|
+
deleteConfirmation?: boolean;
|
|
44
14
|
} & import("react").RefAttributes<HTMLButtonElement>>>;
|
|
15
|
+
DeleteConfirmationModal: import("react").LazyExoticComponent<({ remove, close, ...props }: import("./FieldArray/DeleteConfirmationModal.js").DeleteConfirmationModalProps) => import("react").JSX.Element>;
|
|
45
16
|
FieldArray: import("react").LazyExoticComponent<import("react").FC<import("./FieldArray/index.js").FieldArrayProps>>;
|
|
46
|
-
FieldObject: import("react").LazyExoticComponent<import("react").FC<import("./FieldObject/index.js").FieldObjectProps>>;
|
|
47
17
|
FieldsetWithContext: import("react").LazyExoticComponent<import("react").FC<{
|
|
48
18
|
name: string;
|
|
49
19
|
}>>;
|
|
@@ -92,6 +62,6 @@ declare const _default: {
|
|
|
92
62
|
labels: any;
|
|
93
63
|
disabled: any;
|
|
94
64
|
}) => import("react").JSX.Element>;
|
|
95
|
-
ArrayDisplay: import("react").LazyExoticComponent<({ fieldArrayName, fieldArrayValues, ofField, customField, onEdit, onRemove, move, sortable, error, }: import("./FieldArray/FormDialog/ArrayDisplay/index.js").ArrayDisplayProps) => import("react").JSX.Element>;
|
|
65
|
+
ArrayDisplay: import("react").LazyExoticComponent<({ fieldArrayName, fieldArrayValues, ofField, customField, onEdit, onRemove, move, sortable, deleteConfirmation, error, }: import("./FieldArray/FormDialog/ArrayDisplay/index.js").ArrayDisplayProps) => import("react").JSX.Element>;
|
|
96
66
|
};
|
|
97
67
|
export default _default;
|
package/lazy.js
CHANGED
|
@@ -27,15 +27,18 @@ const src_lazy = {
|
|
|
27
27
|
FieldConditional: lazy(()=>import("./Field/FieldConditional.js").then((module)=>({
|
|
28
28
|
default: module['FieldConditional']
|
|
29
29
|
}))),
|
|
30
|
+
FieldObject: lazy(()=>import("./FieldObject/index.js").then((module)=>({
|
|
31
|
+
default: module['FieldObject']
|
|
32
|
+
}))),
|
|
30
33
|
BaseFieldArray: lazy(()=>import("./FieldArray/BaseFieldArray.js").then((module)=>({
|
|
31
34
|
default: module['BaseFieldArray']
|
|
32
35
|
}))),
|
|
36
|
+
DeleteConfirmationModal: lazy(()=>import("./FieldArray/DeleteConfirmationModal.js").then((module)=>({
|
|
37
|
+
default: module['DeleteConfirmationModal']
|
|
38
|
+
}))),
|
|
33
39
|
FieldArray: lazy(()=>import("./FieldArray/index.js").then((module)=>({
|
|
34
40
|
default: module['FieldArray']
|
|
35
41
|
}))),
|
|
36
|
-
FieldObject: lazy(()=>import("./FieldObject/index.js").then((module)=>({
|
|
37
|
-
default: module['FieldObject']
|
|
38
|
-
}))),
|
|
39
42
|
FieldsetWithContext: lazy(()=>import("./Fieldset/FieldsetWithContext.js").then((module)=>({
|
|
40
43
|
default: module['FieldsetWithContext']
|
|
41
44
|
}))),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digigov/form",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.10",
|
|
4
4
|
"description": "@digigov form builder",
|
|
5
5
|
"author": "GRNET Developers <devs@lists.grnet.gr>",
|
|
6
6
|
"license": "BSD-2-Clause",
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
"yup": "0.32.11",
|
|
16
16
|
"dayjs": "1.10.4",
|
|
17
17
|
"@hookform/resolvers": "5.0.1",
|
|
18
|
-
"@digigov/react-icons": "2.0.
|
|
18
|
+
"@digigov/react-icons": "2.0.10"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"clsx": "2.1.1",
|
|
22
22
|
"react": "^18.3.0 || ^19.1.0",
|
|
23
23
|
"react-dom": "^18.3.0 || ^19.1.0",
|
|
24
|
-
"@digigov/ui": "2.0.
|
|
25
|
-
"@digigov/react-core": "2.0.
|
|
24
|
+
"@digigov/ui": "2.0.10",
|
|
25
|
+
"@digigov/react-core": "2.0.10"
|
|
26
26
|
},
|
|
27
27
|
"gitHead": "c903a46306f77f55ad7fc4d2e274006f39a6c871",
|
|
28
28
|
"private": false,
|
package/registry.d.ts
CHANGED
|
@@ -10,9 +10,10 @@ declare const _default: {
|
|
|
10
10
|
'@digigov/form/Field/FieldConditional': {};
|
|
11
11
|
'@digigov/form/Field': {};
|
|
12
12
|
'@digigov/form/Field/types': {};
|
|
13
|
+
'@digigov/form/FieldObject': {};
|
|
13
14
|
'@digigov/form/FieldArray/BaseFieldArray': {};
|
|
15
|
+
'@digigov/form/FieldArray/DeleteConfirmationModal': {};
|
|
14
16
|
'@digigov/form/FieldArray': {};
|
|
15
|
-
'@digigov/form/FieldObject': {};
|
|
16
17
|
'@digigov/form/Fieldset/FieldsetWithContext': {};
|
|
17
18
|
'@digigov/form/Fieldset': {};
|
|
18
19
|
'@digigov/form/Fieldset/types': {};
|
|
@@ -49,13 +50,13 @@ declare const _default: {
|
|
|
49
50
|
'@digigov/form/Questions/Step/types': {};
|
|
50
51
|
'@digigov/form/inputs/AutoCompleteInput': {};
|
|
51
52
|
'@digigov/form/inputs/Checkboxes': {};
|
|
52
|
-
'@digigov/form/inputs/DateTimeInput': {};
|
|
53
53
|
'@digigov/form/inputs/DateInput': {};
|
|
54
|
+
'@digigov/form/inputs/DateTimeInput': {};
|
|
54
55
|
'@digigov/form/inputs/FileInput': {};
|
|
55
56
|
'@digigov/form/inputs/ImageInput': {};
|
|
56
57
|
'@digigov/form/inputs/Input': {};
|
|
57
|
-
'@digigov/form/inputs/OtpInput': {};
|
|
58
58
|
'@digigov/form/inputs/Label': {};
|
|
59
|
+
'@digigov/form/inputs/OtpInput': {};
|
|
59
60
|
'@digigov/form/inputs/Radio': {};
|
|
60
61
|
'@digigov/form/inputs/Select': {};
|
|
61
62
|
'@digigov/form/validators/utils/afm': {};
|
package/registry.js
CHANGED
|
@@ -11,9 +11,10 @@ import * as __WEBPACK_EXTERNAL_MODULE__Field_FieldBase_js_c624a2e3__ from "./Fie
|
|
|
11
11
|
import * as __WEBPACK_EXTERNAL_MODULE__Field_FieldBaseContainer_js_01a670a9__ from "./Field/FieldBaseContainer.js";
|
|
12
12
|
import * as __WEBPACK_EXTERNAL_MODULE__Field_FieldConditional_js_198c9ee9__ from "./Field/FieldConditional.js";
|
|
13
13
|
import * as __WEBPACK_EXTERNAL_MODULE__Field_types_js_6ef04275__ from "./Field/types.js";
|
|
14
|
+
import * as __WEBPACK_EXTERNAL_MODULE__FieldObject_index_js_3053c0b3__ from "./FieldObject/index.js";
|
|
14
15
|
import * as __WEBPACK_EXTERNAL_MODULE__FieldArray_BaseFieldArray_js_51879b3c__ from "./FieldArray/BaseFieldArray.js";
|
|
16
|
+
import * as __WEBPACK_EXTERNAL_MODULE__FieldArray_DeleteConfirmationModal_js_c12845d4__ from "./FieldArray/DeleteConfirmationModal.js";
|
|
15
17
|
import * as __WEBPACK_EXTERNAL_MODULE__FieldArray_index_js_f6888d1e__ from "./FieldArray/index.js";
|
|
16
|
-
import * as __WEBPACK_EXTERNAL_MODULE__FieldObject_index_js_3053c0b3__ from "./FieldObject/index.js";
|
|
17
18
|
import * as __WEBPACK_EXTERNAL_MODULE__Fieldset_FieldsetWithContext_js_aa40ade4__ from "./Fieldset/FieldsetWithContext.js";
|
|
18
19
|
import * as __WEBPACK_EXTERNAL_MODULE__Fieldset_types_js_45030319__ from "./Fieldset/types.js";
|
|
19
20
|
import * as __WEBPACK_EXTERNAL_MODULE__MultiplicityField_add_objects_js_bc5e12f3__ from "./MultiplicityField/add-objects.js";
|
|
@@ -48,13 +49,13 @@ import * as __WEBPACK_EXTERNAL_MODULE__Questions_Step_index_js_a5d00e0e__ from "
|
|
|
48
49
|
import * as __WEBPACK_EXTERNAL_MODULE__Questions_Step_types_js_adca4924__ from "./Questions/Step/types.js";
|
|
49
50
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_AutoCompleteInput_index_js_64b911d2__ from "./inputs/AutoCompleteInput/index.js";
|
|
50
51
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_Checkboxes_index_js_794dd192__ from "./inputs/Checkboxes/index.js";
|
|
51
|
-
import * as __WEBPACK_EXTERNAL_MODULE__inputs_DateTimeInput_index_js_c8900e1c__ from "./inputs/DateTimeInput/index.js";
|
|
52
52
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_DateInput_index_js_4dd00af8__ from "./inputs/DateInput/index.js";
|
|
53
|
+
import * as __WEBPACK_EXTERNAL_MODULE__inputs_DateTimeInput_index_js_c8900e1c__ from "./inputs/DateTimeInput/index.js";
|
|
53
54
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_FileInput_index_js_a3efab43__ from "./inputs/FileInput/index.js";
|
|
54
55
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_ImageInput_index_js_db0d371d__ from "./inputs/ImageInput/index.js";
|
|
55
56
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_Input_index_js_a3d24895__ from "./inputs/Input/index.js";
|
|
56
|
-
import * as __WEBPACK_EXTERNAL_MODULE__inputs_OtpInput_index_js_cf892bf0__ from "./inputs/OtpInput/index.js";
|
|
57
57
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_Label_index_js_fd36dbbf__ from "./inputs/Label/index.js";
|
|
58
|
+
import * as __WEBPACK_EXTERNAL_MODULE__inputs_OtpInput_index_js_cf892bf0__ from "./inputs/OtpInput/index.js";
|
|
58
59
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_Radio_index_js_dd4e4535__ from "./inputs/Radio/index.js";
|
|
59
60
|
import * as __WEBPACK_EXTERNAL_MODULE__inputs_Select_index_js_96a2f597__ from "./inputs/Select/index.js";
|
|
60
61
|
import * as __WEBPACK_EXTERNAL_MODULE__validators_utils_afm_js_d3ce9cd4__ from "./validators/utils/afm.js";
|
|
@@ -98,9 +99,10 @@ const registry = {
|
|
|
98
99
|
'@digigov/form/Field/FieldConditional': lazyImport(__WEBPACK_EXTERNAL_MODULE__Field_FieldConditional_js_198c9ee9__),
|
|
99
100
|
'@digigov/form/Field': lazyImport(__WEBPACK_EXTERNAL_MODULE__Field_index_js_29296f3b__),
|
|
100
101
|
'@digigov/form/Field/types': lazyImport(__WEBPACK_EXTERNAL_MODULE__Field_types_js_6ef04275__),
|
|
102
|
+
'@digigov/form/FieldObject': lazyImport(__WEBPACK_EXTERNAL_MODULE__FieldObject_index_js_3053c0b3__),
|
|
101
103
|
'@digigov/form/FieldArray/BaseFieldArray': lazyImport(__WEBPACK_EXTERNAL_MODULE__FieldArray_BaseFieldArray_js_51879b3c__),
|
|
104
|
+
'@digigov/form/FieldArray/DeleteConfirmationModal': lazyImport(__WEBPACK_EXTERNAL_MODULE__FieldArray_DeleteConfirmationModal_js_c12845d4__),
|
|
102
105
|
'@digigov/form/FieldArray': lazyImport(__WEBPACK_EXTERNAL_MODULE__FieldArray_index_js_f6888d1e__),
|
|
103
|
-
'@digigov/form/FieldObject': lazyImport(__WEBPACK_EXTERNAL_MODULE__FieldObject_index_js_3053c0b3__),
|
|
104
106
|
'@digigov/form/Fieldset/FieldsetWithContext': lazyImport(__WEBPACK_EXTERNAL_MODULE__Fieldset_FieldsetWithContext_js_aa40ade4__),
|
|
105
107
|
'@digigov/form/Fieldset': lazyImport(__WEBPACK_EXTERNAL_MODULE__Fieldset_index_js_3b7183e3__),
|
|
106
108
|
'@digigov/form/Fieldset/types': lazyImport(__WEBPACK_EXTERNAL_MODULE__Fieldset_types_js_45030319__),
|
|
@@ -137,13 +139,13 @@ const registry = {
|
|
|
137
139
|
'@digigov/form/Questions/Step/types': lazyImport(__WEBPACK_EXTERNAL_MODULE__Questions_Step_types_js_adca4924__),
|
|
138
140
|
'@digigov/form/inputs/AutoCompleteInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_AutoCompleteInput_index_js_64b911d2__),
|
|
139
141
|
'@digigov/form/inputs/Checkboxes': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_Checkboxes_index_js_794dd192__),
|
|
140
|
-
'@digigov/form/inputs/DateTimeInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_DateTimeInput_index_js_c8900e1c__),
|
|
141
142
|
'@digigov/form/inputs/DateInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_DateInput_index_js_4dd00af8__),
|
|
143
|
+
'@digigov/form/inputs/DateTimeInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_DateTimeInput_index_js_c8900e1c__),
|
|
142
144
|
'@digigov/form/inputs/FileInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_FileInput_index_js_a3efab43__),
|
|
143
145
|
'@digigov/form/inputs/ImageInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_ImageInput_index_js_db0d371d__),
|
|
144
146
|
'@digigov/form/inputs/Input': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_Input_index_js_a3d24895__),
|
|
145
|
-
'@digigov/form/inputs/OtpInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_OtpInput_index_js_cf892bf0__),
|
|
146
147
|
'@digigov/form/inputs/Label': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_Label_index_js_fd36dbbf__),
|
|
148
|
+
'@digigov/form/inputs/OtpInput': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_OtpInput_index_js_cf892bf0__),
|
|
147
149
|
'@digigov/form/inputs/Radio': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_Radio_index_js_dd4e4535__),
|
|
148
150
|
'@digigov/form/inputs/Select': lazyImport(__WEBPACK_EXTERNAL_MODULE__inputs_Select_index_js_96a2f597__),
|
|
149
151
|
'@digigov/form/validators/utils/afm': lazyImport(__WEBPACK_EXTERNAL_MODULE__validators_utils_afm_js_d3ce9cd4__),
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useRef, useId } from 'react';
|
|
2
2
|
import { useFieldArray } from 'react-hook-form';
|
|
3
3
|
import type { FieldArrayProps } from '@digigov/form/FieldArray';
|
|
4
|
+
import DeleteConfirmationModal from '@digigov/form/FieldArray/DeleteConfirmationModal';
|
|
4
5
|
import { FieldObject } from '@digigov/form/FieldObject';
|
|
5
6
|
import { FieldsetLabel, Fieldset } from '@digigov/form/Fieldset';
|
|
7
|
+
import { useModal } from '@digigov/ui';
|
|
6
8
|
import { Card } from '@digigov/ui/content/Card';
|
|
7
9
|
import { Button } from '@digigov/ui/form/Button';
|
|
8
10
|
|
|
@@ -14,7 +16,9 @@ type BaseFieldArrayProps = Omit<
|
|
|
14
16
|
| 'setValue'
|
|
15
17
|
| 'reset'
|
|
16
18
|
| 'resetField'
|
|
17
|
-
|
|
19
|
+
> & {
|
|
20
|
+
deleteConfirmation?: boolean;
|
|
21
|
+
};
|
|
18
22
|
export const BaseFieldArray = React.forwardRef<
|
|
19
23
|
HTMLButtonElement,
|
|
20
24
|
BaseFieldArrayProps
|
|
@@ -28,6 +32,7 @@ export const BaseFieldArray = React.forwardRef<
|
|
|
28
32
|
error,
|
|
29
33
|
getValues,
|
|
30
34
|
Field,
|
|
35
|
+
deleteConfirmation,
|
|
31
36
|
...customField
|
|
32
37
|
},
|
|
33
38
|
ref
|
|
@@ -37,6 +42,21 @@ export const BaseFieldArray = React.forwardRef<
|
|
|
37
42
|
name,
|
|
38
43
|
});
|
|
39
44
|
const fields = getValues(name) || [];
|
|
45
|
+
const { registerModal, open, ...modalProps } = useModal();
|
|
46
|
+
const confirmationModalId = useId();
|
|
47
|
+
const indexOfItemToDelete = useRef<number | null>(null);
|
|
48
|
+
|
|
49
|
+
const handleRemoveClick = React.useCallback(
|
|
50
|
+
(index: number) => {
|
|
51
|
+
if (deleteConfirmation) {
|
|
52
|
+
indexOfItemToDelete.current = index;
|
|
53
|
+
open(confirmationModalId);
|
|
54
|
+
} else {
|
|
55
|
+
remove(index);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
[deleteConfirmation, open, remove, confirmationModalId]
|
|
59
|
+
);
|
|
40
60
|
|
|
41
61
|
return (
|
|
42
62
|
<>
|
|
@@ -63,7 +83,9 @@ export const BaseFieldArray = React.forwardRef<
|
|
|
63
83
|
variant={customField.extra?.label.object?.deleteButtonVariant}
|
|
64
84
|
type="button"
|
|
65
85
|
color="warning"
|
|
66
|
-
onClick={() =>
|
|
86
|
+
onClick={() => {
|
|
87
|
+
handleRemoveClick(index);
|
|
88
|
+
}}
|
|
67
89
|
disabled={!customField?.editable}
|
|
68
90
|
>
|
|
69
91
|
{customField.extra?.label.object?.delete}
|
|
@@ -87,6 +109,15 @@ export const BaseFieldArray = React.forwardRef<
|
|
|
87
109
|
{customField.extra?.label.object?.add}
|
|
88
110
|
</Button>
|
|
89
111
|
)}
|
|
112
|
+
<DeleteConfirmationModal
|
|
113
|
+
{...modalProps}
|
|
114
|
+
{...registerModal(confirmationModalId)}
|
|
115
|
+
remove={() =>
|
|
116
|
+
indexOfItemToDelete.current !== null
|
|
117
|
+
? remove(indexOfItemToDelete.current)
|
|
118
|
+
: () => {}
|
|
119
|
+
}
|
|
120
|
+
/>
|
|
90
121
|
</>
|
|
91
122
|
);
|
|
92
123
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, { useId } from 'react';
|
|
2
|
+
import type { ModalProps } from '@digigov/ui';
|
|
3
|
+
import {
|
|
4
|
+
Button,
|
|
5
|
+
Modal,
|
|
6
|
+
ModalAction,
|
|
7
|
+
ModalContent,
|
|
8
|
+
ModalHeading,
|
|
9
|
+
Paragraph,
|
|
10
|
+
} from '@digigov/ui';
|
|
11
|
+
|
|
12
|
+
export interface DeleteConfirmationModalProps extends ModalProps {
|
|
13
|
+
remove: () => void;
|
|
14
|
+
close: () => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const DeleteConfirmationModal = ({
|
|
18
|
+
remove,
|
|
19
|
+
close,
|
|
20
|
+
...props
|
|
21
|
+
}: DeleteConfirmationModalProps) => {
|
|
22
|
+
const headingId = useId();
|
|
23
|
+
return (
|
|
24
|
+
<Modal {...props} aria-labelledby={headingId}>
|
|
25
|
+
<ModalHeading id={headingId}>Επιβεβαίωση διαγραφής</ModalHeading>
|
|
26
|
+
<ModalContent>
|
|
27
|
+
<Paragraph margin={0}>
|
|
28
|
+
Είστε σίγουροι ότι θέλετε να διαγράψετε την εγγραφή;
|
|
29
|
+
</Paragraph>
|
|
30
|
+
</ModalContent>
|
|
31
|
+
<ModalAction>
|
|
32
|
+
<Button
|
|
33
|
+
color="warning"
|
|
34
|
+
onClick={(e) => {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
remove();
|
|
37
|
+
close();
|
|
38
|
+
}}
|
|
39
|
+
>
|
|
40
|
+
Διαγραφή
|
|
41
|
+
</Button>
|
|
42
|
+
<Button
|
|
43
|
+
variant="link"
|
|
44
|
+
type="button"
|
|
45
|
+
onClick={(e) => {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
close();
|
|
48
|
+
}}
|
|
49
|
+
>
|
|
50
|
+
Ακύρωση
|
|
51
|
+
</Button>
|
|
52
|
+
</ModalAction>
|
|
53
|
+
</Modal>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default DeleteConfirmationModal;
|
|
@@ -7,4 +7,5 @@ export default {
|
|
|
7
7
|
export { Default } from '@digigov/form/FieldArray/__stories__/Default';
|
|
8
8
|
export { WithModal } from '@digigov/form/FieldArray/__stories__/WithModal';
|
|
9
9
|
export { WithExactLength } from '@digigov/form/FieldArray/__stories__/WithExactLength';
|
|
10
|
+
export { WithDeleteConfirmation } from '@digigov/form/FieldArray/__stories__/WithDeleteConfirmation';
|
|
10
11
|
export { CardsWithError } from '@digigov/form/FieldArray/__stories__/CardsWithError';
|
|
@@ -12,3 +12,4 @@ export { ReadOnly } from '@digigov/form/FieldArray/FormDialog/ArrayDisplay/__sto
|
|
|
12
12
|
export { Cards } from '@digigov/form/FieldArray/FormDialog/ArrayDisplay/__stories__/Cards';
|
|
13
13
|
export { SortableCards } from '@digigov/form/FieldArray/FormDialog/ArrayDisplay/__stories__/SortableCards';
|
|
14
14
|
export { ReadOnlyCards } from '@digigov/form/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnlyCards';
|
|
15
|
+
export { WithDeleteConfirmation } from '@digigov/form/FieldArray/FormDialog/ArrayDisplay/__stories__/WithDeleteConfirmation';
|