module-package-comp 1.4.10 → 2.3.0

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.
Files changed (38) hide show
  1. package/dist/component/ComponentDisplayer.js +171 -22
  2. package/dist/component/ComponentDisplayer.js.map +1 -1
  3. package/dist/component/PdfExportModal.d.ts +11 -0
  4. package/dist/component/PdfExportModal.js +292 -0
  5. package/dist/component/PdfExportModal.js.map +1 -0
  6. package/dist/component/RubricDisplayer.d.ts +13 -0
  7. package/dist/component/RubricDisplayer.js +151 -0
  8. package/dist/component/RubricDisplayer.js.map +1 -0
  9. package/dist/component/ShowAttr.d.ts +5 -1
  10. package/dist/component/ShowAttr.js +34 -14
  11. package/dist/component/ShowAttr.js.map +1 -1
  12. package/dist/component/inputs/CheckBoxSelect.d.ts +2 -0
  13. package/dist/component/inputs/CheckBoxSelect.js +13 -0
  14. package/dist/component/inputs/CheckBoxSelect.js.map +1 -0
  15. package/dist/component/inputs/IconInput.d.ts +25 -0
  16. package/dist/component/inputs/IconInput.js +12 -0
  17. package/dist/component/inputs/IconInput.js.map +1 -0
  18. package/dist/component/inputs/Input.d.ts +1 -0
  19. package/dist/component/inputs/Input.js.map +1 -1
  20. package/dist/component/inputs/LabledCheckboxSelect.d.ts +6 -0
  21. package/dist/component/inputs/LabledCheckboxSelect.js +19 -0
  22. package/dist/component/inputs/LabledCheckboxSelect.js.map +1 -0
  23. package/dist/component/inputs/LableledInput.d.ts +1 -1
  24. package/dist/component/inputs/LableledInput.js +2 -2
  25. package/dist/component/inputs/LableledInput.js.map +1 -1
  26. package/dist/component/inputs/MultiSelect.js +1 -1
  27. package/dist/component/inputs/MultiSelect.js.map +1 -1
  28. package/dist/index.css +508 -3
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.js +3 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/util/rubricDisplayer.d.ts +52 -0
  33. package/dist/util/rubricDisplayer.js +197 -0
  34. package/dist/util/rubricDisplayer.js.map +1 -0
  35. package/dist/util/type.d.ts +28 -2
  36. package/dist/util/type.js +8 -0
  37. package/dist/util/type.js.map +1 -1
  38. package/package.json +1 -1
@@ -1,43 +1,192 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
2
+ import { useState, useEffect, useMemo } from "react";
3
3
  import { ShowAttr } from "./ShowAttr";
4
4
  import PrimaryBtn from "./PrimaryBtn";
5
5
  import ShowErrors from "./ShowErrors";
6
6
  export function ComponentDisplayer({ component, data, setData, onSubmit, disabled, }) {
7
7
  const [errors, setErrors] = useState([]);
8
+ // Calculate initial repeatable counts from existing data
9
+ const initialRepeatableCounts = useMemo(() => {
10
+ const counts = {};
11
+ component.attributes.forEach((attr) => {
12
+ var _a;
13
+ if ((_a = attr.settings) === null || _a === void 0 ? void 0 : _a.repeatable) {
14
+ // Find all keys in data that belong to this attribute
15
+ const baseName = attr.name;
16
+ const matchingKeys = Object.keys(data).filter((key) => {
17
+ // Match exact name or name with _number suffix
18
+ if (key === baseName)
19
+ return true;
20
+ if (key.startsWith(baseName + "_")) {
21
+ // Check if suffix is a number
22
+ const suffix = key.substring(baseName.length + 1);
23
+ return /^\d+$/.test(suffix);
24
+ }
25
+ return false;
26
+ });
27
+ // Calculate the highest index found
28
+ let maxIndex = 0;
29
+ matchingKeys.forEach((key) => {
30
+ if (key === baseName) {
31
+ maxIndex = Math.max(maxIndex, 0);
32
+ }
33
+ else {
34
+ const suffix = key.substring(baseName.length + 1);
35
+ const index = parseInt(suffix, 10);
36
+ if (!isNaN(index)) {
37
+ maxIndex = Math.max(maxIndex, index);
38
+ }
39
+ }
40
+ });
41
+ // We need at least maxIndex + 1 instances (since index starts at 0)
42
+ counts[baseName] = Math.max(1, maxIndex + 1);
43
+ }
44
+ });
45
+ return counts;
46
+ }, [component.attributes, data]);
47
+ const [repeatableCounts, setRepeatableCounts] = useState(initialRepeatableCounts);
48
+ // Update repeatable counts when data changes
49
+ useEffect(() => {
50
+ setRepeatableCounts((prev) => {
51
+ const newCounts = Object.assign({}, prev);
52
+ let hasChanges = false;
53
+ component.attributes.forEach((attr) => {
54
+ var _a;
55
+ if ((_a = attr.settings) === null || _a === void 0 ? void 0 : _a.repeatable) {
56
+ const baseName = attr.name;
57
+ const matchingKeys = Object.keys(data).filter((key) => {
58
+ if (key === baseName)
59
+ return true;
60
+ if (key.startsWith(baseName + "_")) {
61
+ const suffix = key.substring(baseName.length + 1);
62
+ return /^\d+$/.test(suffix);
63
+ }
64
+ return false;
65
+ });
66
+ if (matchingKeys.length > 0) {
67
+ let maxIndex = 0;
68
+ matchingKeys.forEach((key) => {
69
+ if (key === baseName) {
70
+ maxIndex = Math.max(maxIndex, 0);
71
+ }
72
+ else {
73
+ const suffix = key.substring(baseName.length + 1);
74
+ const index = parseInt(suffix, 10);
75
+ if (!isNaN(index)) {
76
+ maxIndex = Math.max(maxIndex, index);
77
+ }
78
+ }
79
+ });
80
+ const requiredCount = Math.max(1, maxIndex + 1);
81
+ if (prev[baseName] !== requiredCount) {
82
+ newCounts[baseName] = requiredCount;
83
+ hasChanges = true;
84
+ }
85
+ }
86
+ }
87
+ });
88
+ return hasChanges ? newCounts : prev;
89
+ });
90
+ }, [data, component.attributes]);
91
+ // Add a repeatable field instance
92
+ const addRepeatableInstance = (attrName) => {
93
+ setRepeatableCounts((prev) => (Object.assign(Object.assign({}, prev), { [attrName]: (prev[attrName] || 1) + 1 })));
94
+ };
95
+ // Remove a repeatable field instance
96
+ const removeRepeatableInstance = (attrName) => {
97
+ if (repeatableCounts[attrName] > 1) {
98
+ const newCount = repeatableCounts[attrName] - 1;
99
+ setRepeatableCounts((prev) => (Object.assign(Object.assign({}, prev), { [attrName]: newCount })));
100
+ // Clean up data for removed instance (the last one)
101
+ const dataKey = `${attrName}_${newCount}`;
102
+ const temp = Object.assign({}, data);
103
+ if (temp[dataKey]) {
104
+ delete temp[dataKey];
105
+ setData(temp);
106
+ }
107
+ }
108
+ };
109
+ // Get data key name for a field (supports repeatable fields)
110
+ const getDataKey = (attrName, index = 0) => {
111
+ if (index === 0) {
112
+ return attrName; // First instance uses original name
113
+ }
114
+ return `${attrName}_${index}`; // Subsequent instances add index suffix
115
+ };
116
+ // Render a field (may include multiple instances)
117
+ const renderAttribute = (attr) => {
118
+ var _a;
119
+ const isRepeatable = ((_a = attr.settings) === null || _a === void 0 ? void 0 : _a.repeatable) || false;
120
+ const instanceCount = isRepeatable ? repeatableCounts[attr.name] || 1 : 1;
121
+ // Check if this field should be shown
122
+ const shouldShow = canShow(attr, data, component.conditions || []);
123
+ if (!shouldShow) {
124
+ // Clean up data for all instances
125
+ for (let i = 0; i < instanceCount; i++) {
126
+ const dataKey = getDataKey(attr.name, i);
127
+ if (data[dataKey]) {
128
+ const temp = Object.assign({}, data);
129
+ delete temp[dataKey];
130
+ setData(temp);
131
+ }
132
+ }
133
+ return null;
134
+ }
135
+ // Render all instances
136
+ const instances = [];
137
+ for (let i = 0; i < instanceCount; i++) {
138
+ const dataKey = getDataKey(attr.name, i);
139
+ const isFirstInstance = i === 0;
140
+ // Get the value from data (check both exact and suffixed keys)
141
+ let fieldValue = "";
142
+ if (data[dataKey] !== undefined) {
143
+ fieldValue = String(data[dataKey]);
144
+ }
145
+ instances.push(_jsx("div", { className: i > 0 ? "mt-4 border-t pt-4" : "", children: _jsx(ShowAttr, { attribute: attr, value: fieldValue, setValue: (s) => {
146
+ const temp = Object.assign({}, data);
147
+ temp[dataKey] = s;
148
+ setData(temp);
149
+ }, data: data, disabled: disabled, isRepeatable: isRepeatable, repeatableIndex: i, onAddRepeatable: isFirstInstance && isRepeatable
150
+ ? () => addRepeatableInstance(attr.name)
151
+ : undefined, onRemoveRepeatable: isRepeatable
152
+ ? () => removeRepeatableInstance(attr.name)
153
+ : undefined }) }, `${attr.name}_${i}`));
154
+ }
155
+ return instances;
156
+ };
8
157
  return (_jsxs("form", { onSubmit: (e) => {
9
158
  e.preventDefault();
10
- const errs = checkRequired(component.attributes, data);
159
+ const errs = checkRequired(component.attributes, data, repeatableCounts);
11
160
  if (errs.length === 0 && onSubmit) {
12
161
  onSubmit();
13
162
  }
14
163
  else {
15
164
  setErrors(errs);
16
165
  }
17
- }, className: "min-w-72", children: [_jsx("h1", { className: "font-bold text-center text-blue-800 text-4xl mb-8", children: component.label }), _jsx("div", { className: "space-y-3", children: component.attributes.map((attr) => {
18
- if (canShow(attr, data, component.conditions || [])) {
19
- return (_jsx(ShowAttr, { attribute: attr, value: data[attr.name] ? String(data[attr.name]) : "", setValue: (s) => {
20
- const temp = Object.assign({}, data);
21
- temp[attr.name] = s;
22
- setData(temp);
23
- }, data: data, disabled: disabled }, attr.name));
24
- }
25
- else {
26
- if (data[attr.name]) {
27
- const temp = Object.assign({}, data);
28
- temp[attr.name] = "";
29
- setData(temp);
30
- }
31
- }
32
- }) }), errors.length !== 0 && (_jsx("div", { className: "my-6", children: _jsx(ShowErrors, { errors: errors }) })), onSubmit && (_jsx("div", { className: "flex justify-center my-8", children: _jsx(PrimaryBtn, { text: "Submit" }) }))] }));
166
+ }, className: "min-w-72", children: [_jsx("h1", { className: "font-bold text-center text-blue-800 text-4xl mb-8", children: component.label }), _jsx("div", { className: "space-y-6", children: component.attributes.map((attr) => renderAttribute(attr)) }), errors.length !== 0 && (_jsx("div", { className: "my-6", children: _jsx(ShowErrors, { errors: errors }) })), onSubmit && (_jsx("div", { className: "flex justify-center my-8", children: _jsx(PrimaryBtn, { text: "Confirmer" }) }))] }));
33
167
  }
34
- // check the required attributes and return array string of errors
35
- function checkRequired(attributes, data) {
168
+ // Update required field checker to support repeatable fields
169
+ function checkRequired(attributes, data, repeatableCounts) {
36
170
  const requiredAttributes = attributes.filter((attr) => { var _a; return (_a = attr.settings) === null || _a === void 0 ? void 0 : _a.required; });
37
171
  const errors = [];
38
172
  requiredAttributes.forEach((attr) => {
39
- if (!data[attr.name]) {
40
- errors.push(`${attr.label} is required`);
173
+ var _a;
174
+ const isRepeatable = ((_a = attr.settings) === null || _a === void 0 ? void 0 : _a.repeatable) || false;
175
+ if (isRepeatable) {
176
+ // For repeatable fields, check all instances
177
+ const instanceCount = repeatableCounts[attr.name] || 1;
178
+ for (let i = 0; i < instanceCount; i++) {
179
+ const dataKey = i === 0 ? attr.name : `${attr.name}_${i}`;
180
+ if (!data[dataKey]) {
181
+ errors.push(`${attr.label} #${i + 1} is required`);
182
+ }
183
+ }
184
+ }
185
+ else {
186
+ // For non-repeatable fields, only check original field
187
+ if (!data[attr.name]) {
188
+ errors.push(`${attr.label} is required`);
189
+ }
41
190
  }
42
191
  });
43
192
  return errors;
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentDisplayer.js","sourceRoot":"","sources":["../../src/component/ComponentDisplayer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AAUtC,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,GACgB;IACxB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACnD,OAAO,CACL,gBACE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAClC,QAAQ,EAAE,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,EACD,SAAS,EAAC,UAAU,aAEpB,aAAI,SAAS,EAAC,mDAAmD,YAC9D,SAAS,CAAC,KAAK,GACb,EACL,cAAK,SAAS,EAAC,WAAW,YACvB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACjC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;wBACpD,OAAO,CACL,KAAC,QAAQ,IAEP,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EACrD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACd,MAAM,IAAI,qBAAQ,IAAI,CAAE,CAAC;gCACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCACpB,OAAO,CAAC,IAAI,CAAC,CAAC;4BAChB,CAAC,EACD,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,IATb,IAAI,CAAC,IAAI,CAUd,CACH,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BACpB,MAAM,IAAI,qBAAQ,IAAI,CAAE,CAAC;4BACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACrB,OAAO,CAAC,IAAI,CAAC,CAAC;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,GACE,EACL,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,GAAI,GAC1B,CACP,EACA,QAAQ,IAAI,CACX,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,UAAU,IAAC,IAAI,EAAC,QAAQ,GAAG,GACxB,CACP,IACI,CACR,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,aAAa,CAAC,UAAuB,EAAE,IAAc;IAC5D,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAC1C,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,QAAQ,CAAA,EAAA,CAClC,CAAC;IACF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CACd,IAAe,EACf,IAAc,EACd,KAAoB;IAEpB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAC/C,CAAC;IAEF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAoB,EAAE,IAAc;IAC7D,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAElC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI;YACP,OAAO,KAAK,KAAK,SAAS,CAAC;QAC7B,KAAK,KAAK;YACR,OAAO,KAAK,GAAG,SAAS,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,KAAK,GAAG,SAAS,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3C;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ComponentDisplayer.js","sourceRoot":"","sources":["../../src/component/ComponentDisplayer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Component, RubricDataValues } from "../util/type";
2
+ type PdfExportModalProps = {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ components: Component[];
6
+ dataValues: RubricDataValues;
7
+ title?: string;
8
+ extra?: Record<string, unknown>;
9
+ };
10
+ export declare function PdfExportModal({ isOpen, onClose, components, dataValues, title, extra, }: PdfExportModalProps): import("react/jsx-runtime").JSX.Element | null;
11
+ export {};
@@ -0,0 +1,292 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo, useRef, useEffect } from "react";
3
+ export function PdfExportModal({ isOpen, onClose, components, dataValues, title, extra, }) {
4
+ // Track which attributes are selected for export
5
+ const [selectedAttributes, setSelectedAttributes] = useState(() => {
6
+ const initial = {};
7
+ components.forEach((comp) => {
8
+ const compData = dataValues[comp._id];
9
+ if (compData) {
10
+ initial[comp._id] = {};
11
+ Object.keys(compData).forEach((attrName) => {
12
+ initial[comp._id][attrName] = true;
13
+ });
14
+ }
15
+ });
16
+ return initial;
17
+ });
18
+ const printRef = useRef(null);
19
+ // Sync selectedAttributes when dataValues changes (add new attributes as selected)
20
+ useEffect(() => {
21
+ setSelectedAttributes((prev) => {
22
+ const updated = Object.assign({}, prev);
23
+ components.forEach((comp) => {
24
+ const compData = dataValues[comp._id];
25
+ if (compData) {
26
+ if (!updated[comp._id]) {
27
+ updated[comp._id] = {};
28
+ }
29
+ Object.keys(compData).forEach((attrName) => {
30
+ // Only add if not already tracked (preserve user's selection)
31
+ if (updated[comp._id][attrName] === undefined) {
32
+ updated[comp._id][attrName] = true;
33
+ }
34
+ });
35
+ }
36
+ });
37
+ return updated;
38
+ });
39
+ }, [components, dataValues]);
40
+ // Get components that have data
41
+ const componentsWithData = useMemo(() => {
42
+ return components.filter((comp) => {
43
+ const data = dataValues[comp._id];
44
+ return data && Object.keys(data).length > 0;
45
+ });
46
+ }, [components, dataValues]);
47
+ // Toggle attribute selection
48
+ const toggleAttribute = (componentId, attributeName) => {
49
+ setSelectedAttributes((prev) => {
50
+ var _a;
51
+ return (Object.assign(Object.assign({}, prev), { [componentId]: Object.assign(Object.assign({}, prev[componentId]), { [attributeName]: !((_a = prev[componentId]) === null || _a === void 0 ? void 0 : _a[attributeName]) }) }));
52
+ });
53
+ };
54
+ // Toggle all attributes for a component
55
+ const toggleAllForComponent = (componentId, selected) => {
56
+ const compData = dataValues[componentId];
57
+ if (!compData)
58
+ return;
59
+ setSelectedAttributes((prev) => (Object.assign(Object.assign({}, prev), { [componentId]: Object.keys(compData).reduce((acc, attrName) => {
60
+ acc[attrName] = selected;
61
+ return acc;
62
+ }, {}) })));
63
+ };
64
+ // Get attribute label from component
65
+ const getAttributeLabel = (component, attrName) => {
66
+ const attr = component.attributes.find((a) => a.name === attrName);
67
+ return (attr === null || attr === void 0 ? void 0 : attr.label) || attrName;
68
+ };
69
+ // Format value for display
70
+ const formatValue = (value) => {
71
+ if (typeof value === "object") {
72
+ if (Array.isArray(value)) {
73
+ return value.join(", ");
74
+ }
75
+ return JSON.stringify(value, null, 2);
76
+ }
77
+ return String(value);
78
+ };
79
+ // Check if all attributes are selected for a component
80
+ const areAllSelected = (componentId) => {
81
+ const compData = dataValues[componentId];
82
+ if (!compData)
83
+ return false;
84
+ return Object.keys(compData).every((attrName) => { var _a; return (_a = selectedAttributes[componentId]) === null || _a === void 0 ? void 0 : _a[attrName]; });
85
+ };
86
+ // Generate PDF content and download
87
+ const handleDownload = () => {
88
+ const content = generatePdfContent();
89
+ const printWindow = window.open("", "_blank");
90
+ if (!printWindow) {
91
+ alert("Veuillez autoriser les popups pour télécharger le PDF");
92
+ return;
93
+ }
94
+ printWindow.document.write(`
95
+ <!DOCTYPE html>
96
+ <html>
97
+ <head>
98
+ <title>Sauvegarde</title>
99
+ <style>
100
+ * {
101
+ margin: 0;
102
+ padding: 0;
103
+ box-sizing: border-box;
104
+ }
105
+ body {
106
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
107
+ padding: 40px;
108
+ color: #333;
109
+ line-height: 1.6;
110
+ }
111
+ .header {
112
+ text-align: center;
113
+ margin-bottom: 30px;
114
+ padding-bottom: 20px;
115
+ border-bottom: 2px solid #2563eb;
116
+ }
117
+ .header h1 {
118
+ color: #1e40af;
119
+ font-size: 24px;
120
+ margin-bottom: 5px;
121
+ }
122
+ .header p {
123
+ color: #6b7280;
124
+ font-size: 12px;
125
+ }
126
+ .component {
127
+ margin-bottom: 30px;
128
+ page-break-inside: avoid;
129
+ }
130
+ .component-title {
131
+ background: #2563eb;
132
+ color: white;
133
+ padding: 10px 15px;
134
+ font-size: 16px;
135
+ font-weight: 600;
136
+ border-radius: 8px 8px 0 0;
137
+ }
138
+ .component-content {
139
+ border: 1px solid #e5e7eb;
140
+ border-top: none;
141
+ border-radius: 0 0 8px 8px;
142
+ padding: 15px;
143
+ }
144
+ .attribute {
145
+ display: flex;
146
+ padding: 10px 0;
147
+ border-bottom: 1px solid #f3f4f6;
148
+ }
149
+ .attribute:last-child {
150
+ border-bottom: none;
151
+ }
152
+ .attribute-name {
153
+ font-weight: 600;
154
+ color: #374151;
155
+ width: 200px;
156
+ flex-shrink: 0;
157
+ }
158
+ .attribute-value {
159
+ color: #4b5563;
160
+ flex: 1;
161
+ word-break: break-word;
162
+ }
163
+ .extra-info {
164
+ margin-bottom: 30px;
165
+ padding: 15px;
166
+ background: #f9fafb;
167
+ border-radius: 8px;
168
+ border: 1px solid #e5e7eb;
169
+ }
170
+ .extra-item {
171
+ display: inline-block;
172
+ margin-right: 20px;
173
+ margin-bottom: 5px;
174
+ }
175
+ .extra-label {
176
+ font-weight: 600;
177
+ color: #374151;
178
+ }
179
+ .extra-value {
180
+ color: #4b5563;
181
+ margin-left: 5px;
182
+ }
183
+ @media print {
184
+ body { padding: 20px; }
185
+ .component { page-break-inside: avoid; }
186
+ @page {
187
+ margin: 20mm;
188
+ margin-top: 10mm;
189
+ margin-bottom: 10mm;
190
+ }
191
+ }
192
+ /* Hide browser headers/footers */
193
+ @page {
194
+ size: auto;
195
+ margin: 10mm;
196
+ }
197
+ </style>
198
+ </head>
199
+ <body>
200
+ ${content}
201
+ <script>
202
+ window.onload = function() {
203
+ window.print();
204
+ window.onafterprint = function() {
205
+ window.close();
206
+ };
207
+ };
208
+ </script>
209
+ </body>
210
+ </html>
211
+ `);
212
+ printWindow.document.close();
213
+ };
214
+ // Generate HTML content for PDF
215
+ const generatePdfContent = () => {
216
+ const date = new Date().toLocaleDateString("fr-FR", {
217
+ year: "numeric",
218
+ month: "long",
219
+ day: "numeric",
220
+ hour: "2-digit",
221
+ minute: "2-digit",
222
+ });
223
+ let html = `
224
+ <div class="header">
225
+ <h1>${title || "Export de Rubrique"}</h1>
226
+ <p>Généré le ${date}</p>
227
+ </div>
228
+ `;
229
+ // Add extra fields if provided
230
+ if (extra && Object.keys(extra).length > 0) {
231
+ html += `
232
+ <div class="extra-info">
233
+ `;
234
+ Object.entries(extra).forEach(([key, value]) => {
235
+ html += `
236
+ <div class="extra-item">
237
+ <span class="extra-label">${key} :</span>
238
+ <span class="extra-value">${String(value)}</span>
239
+ </div>
240
+ `;
241
+ });
242
+ html += `
243
+ </div>
244
+ `;
245
+ }
246
+ componentsWithData.forEach((component) => {
247
+ const compData = dataValues[component._id];
248
+ if (!compData)
249
+ return;
250
+ const selectedAttrs = Object.entries(compData).filter(([attrName]) => { var _a, _b; return (_b = (_a = selectedAttributes[component._id]) === null || _a === void 0 ? void 0 : _a[attrName]) !== null && _b !== void 0 ? _b : true; });
251
+ if (selectedAttrs.length === 0)
252
+ return;
253
+ html += `
254
+ <div class="component">
255
+ <div class="component-title">${component.label || component.name}</div>
256
+ <div class="component-content">
257
+ `;
258
+ selectedAttrs.forEach(([attrName, value]) => {
259
+ const label = getAttributeLabel(component, attrName);
260
+ const formattedValue = formatValue(value);
261
+ html += `
262
+ <div class="attribute">
263
+ <div class="attribute-name">${label}</div>
264
+ <div class="attribute-value">${formattedValue}</div>
265
+ </div>
266
+ `;
267
+ });
268
+ html += `
269
+ </div>
270
+ </div>
271
+ `;
272
+ });
273
+ return html;
274
+ };
275
+ if (!isOpen)
276
+ return null;
277
+ return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50", onClick: onClose }), _jsxs("div", { className: "relative bg-white rounded-xl shadow-2xl w-full max-w-3xl max-h-[90vh] flex flex-col mx-4", children: [_jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-b border-gray-200", children: [_jsx("h2", { className: "text-xl font-semibold text-gray-800", children: "Exporter en PDF" }), _jsx("div", { className: "flex items-center gap-3", children: _jsx("button", { type: "button", onClick: onClose, className: "p-2 text-gray-500 hover:text-gray-700 hover:bg-gray-100 rounded-lg transition-colors", children: _jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }) })] }), _jsxs("div", { className: "flex-1 overflow-y-auto p-6", children: [_jsx("p", { className: "text-sm text-gray-600 mb-4", children: "S\u00E9lectionnez les attributs \u00E0 inclure dans le PDF :" }), componentsWithData.length === 0 ? (_jsx("div", { className: "text-center py-8 text-gray-500", children: "Aucune donn\u00E9e \u00E0 exporter" })) : (_jsx("div", { className: "space-y-6", ref: printRef, children: componentsWithData.map((component) => {
278
+ const compData = dataValues[component._id];
279
+ if (!compData)
280
+ return null;
281
+ const allSelected = areAllSelected(component._id);
282
+ return (_jsxs("div", { className: "border border-gray-200 rounded-lg overflow-hidden", children: [_jsxs("div", { className: "bg-gray-50 px-4 py-3 flex items-center justify-between border-b border-gray-200", children: [_jsx("h3", { className: "font-semibold text-gray-800", children: component.label || component.name }), _jsx("button", { type: "button", onClick: () => toggleAllForComponent(component._id, !allSelected), className: "text-sm text-blue-600 hover:text-blue-700 font-medium", children: allSelected
283
+ ? "Tout désélectionner"
284
+ : "Tout sélectionner" })] }), _jsx("div", { className: "divide-y divide-gray-100", children: Object.entries(compData).map(([attrName, value]) => {
285
+ var _a, _b;
286
+ const isSelected = (_b = (_a = selectedAttributes[component._id]) === null || _a === void 0 ? void 0 : _a[attrName]) !== null && _b !== void 0 ? _b : true;
287
+ const label = getAttributeLabel(component, attrName);
288
+ return (_jsxs("label", { className: `flex items-start gap-3 px-4 py-3 cursor-pointer hover:bg-gray-50 transition-colors ${!isSelected ? "opacity-50" : ""}`, children: [_jsx("input", { type: "checkbox", checked: isSelected, onChange: () => toggleAttribute(component._id, attrName), className: "mt-1 w-4 h-4 text-blue-600 rounded border-gray-300 focus:ring-blue-500" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "font-medium text-gray-700", children: label }), _jsx("div", { className: "text-sm text-gray-500 truncate", children: formatValue(value) })] })] }, attrName));
289
+ }) })] }, component._id));
290
+ }) }))] }), _jsxs("div", { className: "px-6 py-4 border-t border-gray-200 bg-gray-50 flex justify-end gap-3", children: [_jsx("button", { type: "button", onClick: onClose, className: "px-4 py-2 text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors font-medium", children: "Annuler" }), _jsxs("button", { type: "button", onClick: handleDownload, className: "flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors font-medium", children: [_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) }), "T\u00E9l\u00E9charger le PDF"] })] })] })] }));
291
+ }
292
+ //# sourceMappingURL=PdfExportModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfExportModal.js","sourceRoot":"","sources":["../../src/component/PdfExportModal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Component, Data, Permission, RubricDataValues } from "../util/type";
2
+ type RubricDisplayerProps = {
3
+ components: Component[];
4
+ datas?: (Data | null)[];
5
+ dataValues: RubricDataValues;
6
+ setDataValues: (values: RubricDataValues) => void;
7
+ onSubmit?: (modifiedValues: RubricDataValues) => void;
8
+ permission?: Permission | null;
9
+ pdfTitle?: string;
10
+ pdfExtra?: Record<string, unknown>;
11
+ };
12
+ export declare function RubricDisplayer({ components, datas, dataValues, setDataValues, onSubmit, permission, pdfTitle, pdfExtra, }: RubricDisplayerProps): import("react/jsx-runtime").JSX.Element | null;
13
+ export {};