@solidxai/core-ui 0.1.12-beta.8 → 0.1.12-beta.9
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/SolidRichTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.js +6 -20
- package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.tsx +7 -25
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidRichTextField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SolidRichTextField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAmEzE,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAOnD,YAAY,IAAI,GAAG;IAInB,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA6B9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAID,eAAO,MAAM,6BAA6B,6BAA8B,yBAAyB,4CAqDhG,CAAA;AAED,eAAO,MAAM,6BAA6B,6BAA8B,yBAAyB,4CAiBhG,CAAA"}
|
|
@@ -10,7 +10,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
12
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
-
import
|
|
13
|
+
import DOMPurify from "dompurify";
|
|
14
14
|
import { SolidRichTextEditor } from "../../../shad-cn-ui/SolidRichTextEditor";
|
|
15
15
|
import * as Yup from 'yup';
|
|
16
16
|
import { getExtensionComponent } from "../../../../helpers/registry";
|
|
@@ -59,6 +59,7 @@ var normalizeQuillRichTextHtml = function (html) {
|
|
|
59
59
|
node.removeAttribute("data-list");
|
|
60
60
|
currentList.appendChild(node);
|
|
61
61
|
});
|
|
62
|
+
appendCurrentList();
|
|
62
63
|
orderedList.replaceWith(replacementFragment);
|
|
63
64
|
});
|
|
64
65
|
return template.innerHTML;
|
|
@@ -80,7 +81,7 @@ var SolidRichTextField = /** @class */ (function () {
|
|
|
80
81
|
value: function (value, formData) {
|
|
81
82
|
var fieldLayoutInfo = this.fieldContext.field;
|
|
82
83
|
if (value !== undefined && value !== null) {
|
|
83
|
-
formData.append(fieldLayoutInfo.attrs.name, value);
|
|
84
|
+
formData.append(fieldLayoutInfo.attrs.name, normalizeQuillRichTextHtml(value));
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
});
|
|
@@ -182,27 +183,12 @@ export var DefaultRichTextFormEditWidget = function (_a) {
|
|
|
182
183
|
var formDisabled = (_k = (_j = (_h = solidFormViewMetaData.data.solidView) === null || _h === void 0 ? void 0 : _h.layout) === null || _j === void 0 ? void 0 : _j.attrs) === null || _k === void 0 ? void 0 : _k.disabled;
|
|
183
184
|
var formReadonly = (_o = (_m = (_l = solidFormViewMetaData.data.solidView) === null || _l === void 0 ? void 0 : _l.layout) === null || _m === void 0 ? void 0 : _m.attrs) === null || _o === void 0 ? void 0 : _o.readonly;
|
|
184
185
|
var fieldName = fieldLayoutInfo.attrs.name;
|
|
185
|
-
var fieldValue = formik.values[fieldName] || "";
|
|
186
|
-
var normalizedFieldValue = normalizeQuillRichTextHtml(fieldValue);
|
|
187
|
-
useEffect(function () {
|
|
188
|
-
if (fieldValue === normalizedFieldValue) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
fieldContext.onChange({
|
|
192
|
-
target: {
|
|
193
|
-
name: fieldName,
|
|
194
|
-
value: normalizedFieldValue,
|
|
195
|
-
type: "text",
|
|
196
|
-
},
|
|
197
|
-
}, "onFieldChange");
|
|
198
|
-
}, [fieldContext, fieldName, fieldValue, normalizedFieldValue]);
|
|
199
186
|
return (_jsxs("div", { className: "".concat(styles.fieldWrapper, " relative"), children: [showFieldLabel != false &&
|
|
200
|
-
_jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsx(SolidRichTextEditor, { readOnly: formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled, id: fieldName, value:
|
|
201
|
-
var normalizedValue = normalizeQuillRichTextHtml(value !== null && value !== void 0 ? value : "");
|
|
187
|
+
_jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsx(SolidRichTextEditor, { readOnly: formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled, id: fieldName, value: formik.values[fieldName] || "", onChange: function (value) {
|
|
202
188
|
fieldContext.onChange({
|
|
203
189
|
target: {
|
|
204
190
|
name: fieldName,
|
|
205
|
-
value:
|
|
191
|
+
value: value !== null && value !== void 0 ? value : "",
|
|
206
192
|
type: "text",
|
|
207
193
|
},
|
|
208
194
|
}, "onFieldChange");
|
|
@@ -216,6 +202,6 @@ export var DefaultRichTextFormViewWidget = function (_a) {
|
|
|
216
202
|
var fieldLabel = (_b = fieldLayoutInfo.attrs.label) !== null && _b !== void 0 ? _b : fieldMetadata.displayName;
|
|
217
203
|
var showFieldLabel = (_c = fieldLayoutInfo === null || fieldLayoutInfo === void 0 ? void 0 : fieldLayoutInfo.attrs) === null || _c === void 0 ? void 0 : _c.showLabel;
|
|
218
204
|
return (_jsxs("div", { className: styles.fieldViewWrapper, children: [showFieldLabel != false &&
|
|
219
|
-
_jsx("p", { className: "".concat(styles.fieldViewLabel, " form-field-label"), children: fieldLabel }), _jsx("div", { className: "solid-custom-editor solid-custom-editor-view", id: fieldLabel, dangerouslySetInnerHTML: { __html: formik.values[fieldLayoutInfo.attrs.name] || "" } })] }));
|
|
205
|
+
_jsx("p", { className: "".concat(styles.fieldViewLabel, " form-field-label"), children: fieldLabel }), _jsx("div", { className: "solid-custom-editor solid-custom-editor-view", id: fieldLabel, dangerouslySetInnerHTML: { __html: DOMPurify.sanitize(normalizeQuillRichTextHtml(formik.values[fieldLayoutInfo.attrs.name] || "")) } })] }));
|
|
220
206
|
};
|
|
221
207
|
//# sourceMappingURL=SolidRichTextField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidRichTextField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport React, { useEffect } from \"react\";\nimport { SolidMessage } from \"../../../shad-cn-ui/SolidMessage\";\nimport { SolidRichTextEditor } from \"../../../shad-cn-ui/SolidRichTextEditor\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\nconst normalizeQuillRichTextHtml = (html: string): string => {\n if (!html || typeof document === \"undefined\") {\n return html ?? \"\";\n }\n\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n\n const orderedLists = Array.from(template.content.querySelectorAll(\"ol\")).reverse();\n\n orderedLists.forEach((orderedList) => {\n const listItems = Array.from(orderedList.children).filter(\n (child): child is HTMLLIElement => child instanceof HTMLLIElement,\n );\n\n if (listItems.length === 0) {\n return;\n }\n\n const hasBulletItems = listItems.some((item) => item.getAttribute(\"data-list\") === \"bullet\");\n if (!hasBulletItems) {\n listItems.forEach((item) => item.removeAttribute(\"data-list\"));\n return;\n }\n\n const replacementFragment = document.createDocumentFragment();\n let currentList: HTMLOListElement | HTMLUListElement | null = null;\n let currentListType: \"ordered\" | \"bullet\" | null = null;\n\n const appendCurrentList = () => {\n if (currentList) {\n replacementFragment.appendChild(currentList);\n currentList = null;\n currentListType = null;\n }\n };\n\n Array.from(orderedList.childNodes).forEach((node) => {\n if (!(node instanceof HTMLLIElement)) {\n appendCurrentList();\n replacementFragment.appendChild(node);\n return;\n }\n\n const listType = node.getAttribute(\"data-list\") === \"bullet\" ? \"bullet\" : \"ordered\";\n if (!currentList || currentListType !== listType) {\n appendCurrentList();\n currentList = document.createElement(listType === \"bullet\" ? \"ul\" : \"ol\");\n currentListType = listType;\n }\n\n node.removeAttribute(\"data-list\");\n currentList.appendChild(node);\n });\n\n orderedList.replaceWith(replacementFragment);\n });\n\n return template.innerHTML;\n};\n\nexport class SolidRichTextField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n if (value !== undefined && value !== null) {\n formData.append(fieldLayoutInfo.attrs.name, value);\n }\n }\n\n initialValue(): any {\n return this.fieldContext.data[this.fieldContext.field.attrs.name];\n }\n\n validationSchema(): Yup.Schema {\n let schema: Yup.StringSchema<string | null | undefined> = Yup.string();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n if (fieldMetadata.required) {\n schema = schema.required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel));\n } else {\n schema = schema.nullable(); // Allow null when not required\n }\n // 2. length (min/max)\n if (fieldMetadata.min && fieldMetadata.min > 0) {\n schema = schema.min(fieldMetadata.min, ERROR_MESSAGES.FIELD_MINIMUM_CHARACTER(fieldLabel,fieldMetadata.min));\n }\n if (fieldMetadata.max && fieldMetadata.max > 0) {\n schema = schema.max(fieldMetadata.max, ERROR_MESSAGES.FIELD_MAXIMUM_CHARACTER(fieldLabel,fieldMetadata.max));\n }\n // 3. regular expression\n if (fieldMetadata.regexPattern) {\n const regexPatternNotMatchingErrorMsg = fieldMetadata.regexPatternNotMatchingErrorMsg ?? `${fieldLabel} has invalid data.`\n schema = schema.matches(fieldMetadata.regexPattern, regexPatternNotMatchingErrorMsg);\n }\n\n return schema;\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultRichTextFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultRichTextFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\nexport const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const fieldName = fieldLayoutInfo.attrs.name;\n const fieldValue = formik.values[fieldName] || \"\";\n const normalizedFieldValue = normalizeQuillRichTextHtml(fieldValue);\n\n useEffect(() => {\n if (fieldValue === normalizedFieldValue) {\n return;\n }\n\n fieldContext.onChange(\n {\n target: {\n name: fieldName,\n value: normalizedFieldValue,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n }, [fieldContext, fieldName, fieldValue, normalizedFieldValue]);\n\n\n return (\n <div className={`${styles.fieldWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {fieldMetadata.required && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidRichTextEditor\n readOnly={formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled}\n id={fieldName}\n value={normalizedFieldValue}\n onChange={(value) => {\n const normalizedValue = normalizeQuillRichTextHtml(value ?? \"\");\n fieldContext.onChange(\n {\n target: {\n name: fieldName,\n value: normalizedValue,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n }}\n className=\"solid-custom-editor\"\n style={{ minHeight: 180 }}\n />\n {isFormFieldValid(formik, fieldName) && (\n <p className={styles.fieldError}>{formik?.errors[fieldName]?.toString()}</p>\n )}\n </div>\n );\n}\n\nexport const DefaultRichTextFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel != false &&\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n }\n <div\n className=\"solid-custom-editor solid-custom-editor-view\"\n id={fieldLabel}\n dangerouslySetInnerHTML={{ __html: formik.values[fieldLayoutInfo.attrs.name] || \"\" }}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidRichTextField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidRichTextField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport React from \"react\";\nimport DOMPurify from \"dompurify\";\nimport { SolidMessage } from \"../../../shad-cn-ui/SolidMessage\";\nimport { SolidRichTextEditor } from \"../../../shad-cn-ui/SolidRichTextEditor\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\nconst normalizeQuillRichTextHtml = (html: string): string => {\n if (!html || typeof document === \"undefined\") {\n return html ?? \"\";\n }\n\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n\n const orderedLists = Array.from(template.content.querySelectorAll(\"ol\")).reverse();\n\n orderedLists.forEach((orderedList) => {\n const listItems = Array.from(orderedList.children).filter(\n (child): child is HTMLLIElement => child instanceof HTMLLIElement,\n );\n\n if (listItems.length === 0) {\n return;\n }\n\n const hasBulletItems = listItems.some((item) => item.getAttribute(\"data-list\") === \"bullet\");\n if (!hasBulletItems) {\n listItems.forEach((item) => item.removeAttribute(\"data-list\"));\n return;\n }\n\n const replacementFragment = document.createDocumentFragment();\n let currentList: HTMLOListElement | HTMLUListElement | null = null;\n let currentListType: \"ordered\" | \"bullet\" | null = null;\n\n const appendCurrentList = () => {\n if (currentList) {\n replacementFragment.appendChild(currentList);\n currentList = null;\n currentListType = null;\n }\n };\n\n Array.from(orderedList.childNodes).forEach((node) => {\n if (!(node instanceof HTMLLIElement)) {\n appendCurrentList();\n replacementFragment.appendChild(node);\n return;\n }\n\n const listType = node.getAttribute(\"data-list\") === \"bullet\" ? \"bullet\" : \"ordered\";\n if (!currentList || currentListType !== listType) {\n appendCurrentList();\n currentList = document.createElement(listType === \"bullet\" ? \"ul\" : \"ol\");\n currentListType = listType;\n }\n\n node.removeAttribute(\"data-list\");\n currentList.appendChild(node);\n });\n\n appendCurrentList();\n orderedList.replaceWith(replacementFragment);\n });\n\n return template.innerHTML;\n};\n\nexport class SolidRichTextField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n if (value !== undefined && value !== null) {\n formData.append(fieldLayoutInfo.attrs.name, normalizeQuillRichTextHtml(value));\n }\n }\n\n initialValue(): any {\n return this.fieldContext.data[this.fieldContext.field.attrs.name];\n }\n\n validationSchema(): Yup.Schema {\n let schema: Yup.StringSchema<string | null | undefined> = Yup.string();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n if (fieldMetadata.required) {\n schema = schema.required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel));\n } else {\n schema = schema.nullable(); // Allow null when not required\n }\n // 2. length (min/max)\n if (fieldMetadata.min && fieldMetadata.min > 0) {\n schema = schema.min(fieldMetadata.min, ERROR_MESSAGES.FIELD_MINIMUM_CHARACTER(fieldLabel,fieldMetadata.min));\n }\n if (fieldMetadata.max && fieldMetadata.max > 0) {\n schema = schema.max(fieldMetadata.max, ERROR_MESSAGES.FIELD_MAXIMUM_CHARACTER(fieldLabel,fieldMetadata.max));\n }\n // 3. regular expression\n if (fieldMetadata.regexPattern) {\n const regexPatternNotMatchingErrorMsg = fieldMetadata.regexPatternNotMatchingErrorMsg ?? `${fieldLabel} has invalid data.`\n schema = schema.matches(fieldMetadata.regexPattern, regexPatternNotMatchingErrorMsg);\n }\n\n return schema;\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultRichTextFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultRichTextFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\nexport const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const fieldName = fieldLayoutInfo.attrs.name;\n\n\n return (\n <div className={`${styles.fieldWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {fieldMetadata.required && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidRichTextEditor\n readOnly={formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled}\n id={fieldName}\n value={formik.values[fieldName] || \"\"}\n onChange={(value) => {\n fieldContext.onChange(\n {\n target: {\n name: fieldName,\n value: value ?? \"\",\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n }}\n className=\"solid-custom-editor\"\n style={{ minHeight: 180 }}\n />\n {isFormFieldValid(formik, fieldName) && (\n <p className={styles.fieldError}>{formik?.errors[fieldName]?.toString()}</p>\n )}\n </div>\n );\n}\n\nexport const DefaultRichTextFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel != false &&\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n }\n <div\n className=\"solid-custom-editor solid-custom-editor-view\"\n id={fieldLabel}\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(normalizeQuillRichTextHtml(formik.values[fieldLayoutInfo.attrs.name] || \"\")) }}\n />\n </div>\n );\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import React
|
|
2
|
+
import React from "react";
|
|
3
|
+
import DOMPurify from "dompurify";
|
|
3
4
|
import { SolidMessage } from "../../../shad-cn-ui/SolidMessage";
|
|
4
5
|
import { SolidRichTextEditor } from "../../../shad-cn-ui/SolidRichTextEditor";
|
|
5
6
|
import * as Yup from 'yup';
|
|
@@ -65,6 +66,7 @@ const normalizeQuillRichTextHtml = (html: string): string => {
|
|
|
65
66
|
currentList.appendChild(node);
|
|
66
67
|
});
|
|
67
68
|
|
|
69
|
+
appendCurrentList();
|
|
68
70
|
orderedList.replaceWith(replacementFragment);
|
|
69
71
|
});
|
|
70
72
|
|
|
@@ -82,7 +84,7 @@ export class SolidRichTextField implements ISolidField {
|
|
|
82
84
|
updateFormData(value: any, formData: FormData): any {
|
|
83
85
|
const fieldLayoutInfo = this.fieldContext.field;
|
|
84
86
|
if (value !== undefined && value !== null) {
|
|
85
|
-
formData.append(fieldLayoutInfo.attrs.name, value);
|
|
87
|
+
formData.append(fieldLayoutInfo.attrs.name, normalizeQuillRichTextHtml(value));
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
|
|
@@ -189,25 +191,6 @@ export const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFor
|
|
|
189
191
|
const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;
|
|
190
192
|
const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;
|
|
191
193
|
const fieldName = fieldLayoutInfo.attrs.name;
|
|
192
|
-
const fieldValue = formik.values[fieldName] || "";
|
|
193
|
-
const normalizedFieldValue = normalizeQuillRichTextHtml(fieldValue);
|
|
194
|
-
|
|
195
|
-
useEffect(() => {
|
|
196
|
-
if (fieldValue === normalizedFieldValue) {
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
fieldContext.onChange(
|
|
201
|
-
{
|
|
202
|
-
target: {
|
|
203
|
-
name: fieldName,
|
|
204
|
-
value: normalizedFieldValue,
|
|
205
|
-
type: "text",
|
|
206
|
-
},
|
|
207
|
-
} as any,
|
|
208
|
-
"onFieldChange"
|
|
209
|
-
);
|
|
210
|
-
}, [fieldContext, fieldName, fieldValue, normalizedFieldValue]);
|
|
211
194
|
|
|
212
195
|
|
|
213
196
|
return (
|
|
@@ -222,14 +205,13 @@ export const DefaultRichTextFormEditWidget = ({ formik, fieldContext }: SolidFor
|
|
|
222
205
|
<SolidRichTextEditor
|
|
223
206
|
readOnly={formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled}
|
|
224
207
|
id={fieldName}
|
|
225
|
-
value={
|
|
208
|
+
value={formik.values[fieldName] || ""}
|
|
226
209
|
onChange={(value) => {
|
|
227
|
-
const normalizedValue = normalizeQuillRichTextHtml(value ?? "");
|
|
228
210
|
fieldContext.onChange(
|
|
229
211
|
{
|
|
230
212
|
target: {
|
|
231
213
|
name: fieldName,
|
|
232
|
-
value:
|
|
214
|
+
value: value ?? "",
|
|
233
215
|
type: "text",
|
|
234
216
|
},
|
|
235
217
|
} as any,
|
|
@@ -259,7 +241,7 @@ export const DefaultRichTextFormViewWidget = ({ formik, fieldContext }: SolidFor
|
|
|
259
241
|
<div
|
|
260
242
|
className="solid-custom-editor solid-custom-editor-view"
|
|
261
243
|
id={fieldLabel}
|
|
262
|
-
dangerouslySetInnerHTML={{ __html: formik.values[fieldLayoutInfo.attrs.name] || "" }}
|
|
244
|
+
dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(normalizeQuillRichTextHtml(formik.values[fieldLayoutInfo.attrs.name] || "")) }}
|
|
263
245
|
/>
|
|
264
246
|
</div>
|
|
265
247
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidxai/core-ui",
|
|
3
|
-
"version": "0.1.12-beta.
|
|
3
|
+
"version": "0.1.12-beta.9",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build:tailwind": "tailwindcss -i ./src/resources/solid-tailwind.css -o ./src/resources/solid-tailwind-generated.css -c ./tailwind.config.js --minify",
|
|
6
6
|
"prebuild": "npm run build:tailwind && npm run copy-resources && npm run copy-styles",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"@radix-ui/react-popover": "^1.1.15",
|
|
33
33
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
34
34
|
"@tanstack/react-table": "^8.21.3",
|
|
35
|
+
"@types/jsoneditor": "^9.9.6",
|
|
35
36
|
"@types/lodash": "^4.17.23",
|
|
36
37
|
"@types/pluralize": "^0.0.33",
|
|
37
38
|
"@types/qs": "^6.14.0",
|
|
@@ -44,13 +45,13 @@
|
|
|
44
45
|
"copyfile": "^0.1.2",
|
|
45
46
|
"copyfiles": "^2.4.1",
|
|
46
47
|
"dayjs": "^1.11.19",
|
|
48
|
+
"dompurify": "^3.4.5",
|
|
47
49
|
"echarts": "^5.6.0",
|
|
48
50
|
"echarts-for-react": "^3.0.2",
|
|
49
51
|
"gridstack": "^12.2.1",
|
|
50
52
|
"handlebars": "^4.7.8",
|
|
51
53
|
"html-react-parser": "^5.2.2",
|
|
52
54
|
"html2canvas": "^1.4.1",
|
|
53
|
-
"@types/jsoneditor": "^9.9.6",
|
|
54
55
|
"jsoneditor": "^10.4.3",
|
|
55
56
|
"jspdf": "^2.5.1",
|
|
56
57
|
"jwt-decode": "^4.0.0",
|