@carlonicora/nextjs-jsonapi 1.9.0 → 1.10.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.
- package/dist/{BlockNoteEditor-MXNV2O43.mjs → BlockNoteEditor-F6DZNT6A.mjs} +2 -2
- package/dist/{BlockNoteEditor-O32YPSNN.js → BlockNoteEditor-SIIMOS7X.js} +6 -6
- package/dist/{BlockNoteEditor-O32YPSNN.js.map → BlockNoteEditor-SIIMOS7X.js.map} +1 -1
- package/dist/{chunk-YHUK7PFT.mjs → chunk-PH4P2DR6.mjs} +100 -73
- package/dist/{chunk-YHUK7PFT.mjs.map → chunk-PH4P2DR6.mjs.map} +1 -1
- package/dist/{chunk-PVN4DI3H.js → chunk-UJEQG3XF.js} +37 -10
- package/dist/chunk-UJEQG3XF.js.map +1 -0
- package/dist/client/index.js +2 -2
- package/dist/client/index.mjs +1 -1
- package/dist/components/index.js +2 -2
- package/dist/components/index.mjs +1 -1
- package/dist/contexts/index.js +2 -2
- package/dist/contexts/index.mjs +1 -1
- package/dist/scripts/generate-web-module/templates/data/model.template.js +2 -1
- package/dist/scripts/generate-web-module/templates/data/model.template.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2 -2
- package/dist/server/index.mjs.map +1 -1
- package/package.json +8 -6
- package/scripts/generate-web-module/templates/data/model.template.ts +2 -1
- package/src/components/pages/PageContentContainer.tsx +29 -6
- package/src/features/auth/utils/AuthCookies.ts +2 -2
- package/src/server/ServerSession.ts +2 -2
- package/dist/chunk-PVN4DI3H.js.map +0 -1
- /package/dist/{BlockNoteEditor-MXNV2O43.mjs.map → BlockNoteEditor-F6DZNT6A.mjs.map} +0 -0
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
Button,
|
|
4
4
|
errorToast,
|
|
5
5
|
useCurrentUserContext
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-PH4P2DR6.mjs";
|
|
7
7
|
import "./chunk-33UYFFIK.mjs";
|
|
8
8
|
import {
|
|
9
9
|
BlockNoteDiffUtil,
|
|
@@ -380,4 +380,4 @@ __name(BlockNoteEditor, "BlockNoteEditor");
|
|
|
380
380
|
export {
|
|
381
381
|
BlockNoteEditor as default
|
|
382
382
|
};
|
|
383
|
-
//# sourceMappingURL=BlockNoteEditor-
|
|
383
|
+
//# sourceMappingURL=BlockNoteEditor-F6DZNT6A.mjs.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkUJEQG3XFjs = require('./chunk-UJEQG3XF.js');
|
|
7
7
|
require('./chunk-I7OQ5WKX.js');
|
|
8
8
|
|
|
9
9
|
|
|
@@ -79,7 +79,7 @@ var createDiffActionsInlineContentSpec = /* @__PURE__ */ _chunk7QVYU63Ejs.__name
|
|
|
79
79
|
const diffIds = props.inlineContent.props.diffIds;
|
|
80
80
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "diff-actions-container mx-2 inline-flex items-center gap-1 align-middle", children: [
|
|
81
81
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
82
|
-
|
|
82
|
+
_chunkUJEQG3XFjs.Button,
|
|
83
83
|
{
|
|
84
84
|
title: "Accept change",
|
|
85
85
|
onClick: (e) => {
|
|
@@ -91,7 +91,7 @@ var createDiffActionsInlineContentSpec = /* @__PURE__ */ _chunk7QVYU63Ejs.__name
|
|
|
91
91
|
}
|
|
92
92
|
),
|
|
93
93
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
94
|
-
|
|
94
|
+
_chunkUJEQG3XFjs.Button,
|
|
95
95
|
{
|
|
96
96
|
title: "Reject change",
|
|
97
97
|
className: "mx-2 p-0",
|
|
@@ -121,7 +121,7 @@ function BlockNoteEditor({
|
|
|
121
121
|
bordered
|
|
122
122
|
}) {
|
|
123
123
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
124
|
-
const { company } =
|
|
124
|
+
const { company } = _chunkUJEQG3XFjs.useCurrentUserContext.call(void 0, );
|
|
125
125
|
const [acceptedChanges, setAcceptedChanges] = _react3.useState.call(void 0, /* @__PURE__ */ new Set());
|
|
126
126
|
const [rejectedChanges, setRejectedChanges] = _react3.useState.call(void 0, /* @__PURE__ */ new Set());
|
|
127
127
|
const editorRef = _react3.useRef.call(void 0, null);
|
|
@@ -157,7 +157,7 @@ function BlockNoteEditor({
|
|
|
157
157
|
const uploadImage = _react3.useCallback.call(void 0,
|
|
158
158
|
async (file) => {
|
|
159
159
|
if (!company) {
|
|
160
|
-
|
|
160
|
+
_chunkUJEQG3XFjs.errorToast.call(void 0, {
|
|
161
161
|
title: t(`generic.errors.upload`),
|
|
162
162
|
error: t(`generic.errors.upload_description`)
|
|
163
163
|
});
|
|
@@ -380,4 +380,4 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlockNoteEditor, "BlockNoteEditor");
|
|
|
380
380
|
|
|
381
381
|
|
|
382
382
|
exports.default = BlockNoteEditor;
|
|
383
|
-
//# sourceMappingURL=BlockNoteEditor-
|
|
383
|
+
//# sourceMappingURL=BlockNoteEditor-SIIMOS7X.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-O32YPSNN.js","../src/components/editors/BlockNoteEditor.tsx","../src/components/editors/BlockNoteEditorFormattingToolbar.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-O32YPSNN.js","sourcesContent":[null,"\"use client\";\n\nimport { BlockNoteSchema, defaultInlineContentSpecs, PartialBlock } from \"@blocknote/core\";\nimport { createReactInlineContentSpec, useCreateBlockNote } from \"@blocknote/react\";\nimport { BlockNoteView } from \"@blocknote/shadcn\";\nimport \"@blocknote/shadcn/style.css\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { S3Interface } from \"../../features/s3/data\";\nimport { UserInterface } from \"../../features/user/data\";\nimport { S3Service } from \"../../features/s3/data/s3.service\";\nimport { Button } from \"../../shadcnui\";\nimport { BlockNoteDiffUtil, BlockNoteWordDiffRendererUtil, cn } from \"../../utils\";\nimport { errorToast } from \"../errors\";\nimport { BlockNoteEditorFormattingToolbar } from \"./BlockNoteEditorFormattingToolbar\";\n\nexport type BlockNoteEditorProps = {\n id: string;\n type: string;\n initialContent?: PartialBlock[];\n onChange?: (content: any, isEmpty: boolean, hasUnresolvedDiff: boolean) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n markdownContent?: string;\n diffContent?: PartialBlock[];\n placeholder?: string;\n bordered?: boolean;\n};\n\nconst createDiffActionsInlineContentSpec = (\n handleAcceptChange: (diffId: string) => void,\n handleRejectChange: (diffId: string) => void,\n) => {\n return createReactInlineContentSpec(\n {\n type: \"diffActions\",\n propSchema: {\n diffIds: {\n default: \"\",\n },\n },\n content: \"none\",\n },\n {\n render: (props) => {\n const diffIds = props.inlineContent.props.diffIds;\n\n return (\n <span className=\"diff-actions-container mx-2 inline-flex items-center gap-1 align-middle\">\n <Button\n title=\"Accept change\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleAcceptChange(id.trim()));\n }}\n >\n <CheckIcon className=\"h-3 w-3 text-green-600\" />\n </Button>\n <Button\n title=\"Reject change\"\n className=\"mx-2 p-0\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleRejectChange(id.trim()));\n }}\n >\n <XIcon className=\"h-3 w-3 text-red-600\" />\n </Button>\n </span>\n );\n },\n },\n );\n};\n\nexport default function BlockNoteEditor({\n id,\n type,\n initialContent,\n onChange,\n size,\n className,\n markdownContent,\n diffContent,\n placeholder,\n bordered,\n}: BlockNoteEditorProps): React.JSX.Element {\n const t = useTranslations();\n const { company } = useCurrentUserContext<UserInterface>();\n\n const [acceptedChanges, setAcceptedChanges] = useState<Set<string>>(new Set());\n const [rejectedChanges, setRejectedChanges] = useState<Set<string>>(new Set());\n\n const editorRef = useRef<HTMLDivElement>(null);\n\n const handleAcceptChange = useCallback((diffId: string) => {\n setAcceptedChanges((prev) => new Set([...prev, diffId]));\n setRejectedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const handleRejectChange = useCallback((diffId: string) => {\n setRejectedChanges((prev) => new Set([...prev, diffId]));\n setAcceptedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const DiffActionsInlineContent = useMemo(\n () => createDiffActionsInlineContentSpec(handleAcceptChange, handleRejectChange),\n [handleAcceptChange, handleRejectChange],\n );\n\n const schema = useMemo(\n () =>\n BlockNoteSchema.create({\n inlineContentSpecs: {\n ...defaultInlineContentSpecs,\n diffActions: DiffActionsInlineContent,\n },\n } as any),\n [DiffActionsInlineContent],\n );\n\n const uploadImage = useCallback(\n async (file: File): Promise<string> => {\n if (!company) {\n errorToast({\n title: t(`generic.errors.upload`),\n error: t(`generic.errors.upload_description`),\n });\n throw new Error(t(`generic.errors.upload`));\n }\n\n const fileType = file.type;\n const key = `companies/${company.id}/${type}/${id}/${file.name}`;\n\n const s3: S3Interface = await S3Service.getPreSignedUrl({\n key: key,\n contentType: fileType,\n isPublic: true,\n });\n\n await fetch(s3.url, {\n method: \"PUT\",\n headers: s3.headers,\n body: file,\n });\n\n const signedImage: S3Interface = await S3Service.getSignedUrl({\n key: key,\n isPublic: true,\n });\n\n return signedImage.url;\n },\n [company, id, t],\n );\n\n // Utility: Remove trailing empty blocks for read-only display\n const removeTrailingEmptyBlocks = useCallback(\n (blocks: PartialBlock[]): PartialBlock[] => {\n if (!blocks || blocks.length === 0) return blocks;\n\n // Only remove trailing empty blocks in read-only mode\n if (onChange !== undefined) return blocks;\n\n const result = [...blocks];\n\n // Remove trailing empty paragraph blocks, but keep at least one block\n while (result.length > 1) {\n const lastBlock = result[result.length - 1];\n\n // Check if it's an empty paragraph\n const isEmptyParagraph =\n lastBlock.type === \"paragraph\" &&\n (!lastBlock.content ||\n lastBlock.content.length === 0 ||\n (Array.isArray(lastBlock.content) && lastBlock.content.every((c: any) => !c.text || c.text.trim() === \"\")));\n\n if (isEmptyParagraph) {\n result.pop();\n } else {\n break;\n }\n }\n\n return result;\n },\n [onChange],\n );\n\n const processedContent = useMemo(() => {\n if (diffContent && initialContent) {\n try {\n const diffResult = BlockNoteDiffUtil.diff(initialContent, diffContent);\n const renderedDiff = BlockNoteWordDiffRendererUtil.renderWordDiffs(\n diffResult.blocks,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n );\n return removeTrailingEmptyBlocks(renderedDiff);\n } catch (error) {\n return initialContent && Array.isArray(initialContent) && initialContent.length > 0\n ? removeTrailingEmptyBlocks(initialContent)\n : [];\n }\n }\n\n if (!initialContent) {\n return [];\n }\n\n if (!Array.isArray(initialContent)) {\n return [];\n }\n\n return initialContent.length > 0 ? removeTrailingEmptyBlocks(initialContent) : [];\n }, [\n initialContent,\n diffContent,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n removeTrailingEmptyBlocks,\n ]);\n\n const validatedInitialContent = useMemo(() => {\n if (processedContent && Array.isArray(processedContent) && processedContent.length > 0) {\n const validatedContent = processedContent.filter((block) => {\n if (!block || typeof block !== \"object\") return false;\n if (!(block as any).type) return false;\n return true;\n });\n return validatedContent.length > 0 ? (validatedContent as PartialBlock[]) : undefined;\n }\n return undefined;\n }, [processedContent]);\n\n const editor = useCreateBlockNote(\n useMemo(\n () => ({\n placeholders: {\n emptyDocument: placeholder || t(`generic.blocknote.placeholder`),\n },\n schema,\n initialContent: validatedInitialContent,\n uploadFile: uploadImage,\n }),\n [placeholder, t, schema, validatedInitialContent, uploadImage],\n ),\n );\n\n const handleChange = useCallback(async () => {\n if (!onChange) return;\n const newBlocks = editor.document;\n\n const markdownFromBlocks = (await editor.blocksToMarkdownLossy(editor.document)).trim();\n\n function hasUnresolvedDiffsRecursive(block: any): boolean {\n if (!block || typeof block !== \"object\") return false;\n let diffId = undefined;\n if (block.props && block.props.diffId) diffId = block.props.diffId;\n if (!diffId && block.attrs && block.attrs.diffId) diffId = block.attrs.diffId;\n if (diffId && !acceptedChanges.has(diffId) && !rejectedChanges.has(diffId)) {\n return true;\n }\n\n if (block.content) {\n const contentArr = Array.isArray(block.content) ? block.content : [block.content];\n for (const inline of contentArr) {\n if (inline && typeof inline === \"object\") {\n if (inline.type === \"diffActions\" && inline.props && inline.props.diffIds) {\n const ids =\n typeof inline.props.diffIds === \"string\" ? inline.props.diffIds.split(\",\") : inline.props.diffIds;\n for (const id of ids) {\n const trimmed = (id || \"\").toString().trim();\n if (trimmed && !acceptedChanges.has(trimmed) && !rejectedChanges.has(trimmed)) {\n return true;\n }\n }\n }\n if (inline.props && inline.props.diffId) {\n const diffIdInline = inline.props.diffId;\n if (diffIdInline && !acceptedChanges.has(diffIdInline) && !rejectedChanges.has(diffIdInline)) {\n return true;\n }\n }\n if (inline.children && Array.isArray(inline.children)) {\n for (const child of inline.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n }\n }\n }\n if (Array.isArray(block.children)) {\n for (const child of block.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n return false;\n }\n\n let hasUnresolvedDiff = false;\n if (Array.isArray(newBlocks)) {\n hasUnresolvedDiff = newBlocks.some((block: any) => hasUnresolvedDiffsRecursive(block));\n }\n\n onChange(newBlocks, !markdownFromBlocks.length, hasUnresolvedDiff);\n }, [editor, onChange, id, acceptedChanges, rejectedChanges]);\n\n // Utility: deep equality for arrays of blocks\n const areBlocksEqual = (a: any[], b: any[]): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n };\n\n // Only initialize from markdownContent once per value, and only if different\n const hasInitializedFromMarkdown = useRef<string | null>(null);\n useEffect(() => {\n const updateContent = async (markdown: string) => {\n const blocks = await editor.tryParseMarkdownToBlocks(markdown);\n if (!areBlocksEqual(blocks, editor.document)) {\n editor.replaceBlocks(editor.document, blocks);\n }\n };\n\n if (markdownContent && hasInitializedFromMarkdown.current !== markdownContent) {\n hasInitializedFromMarkdown.current = markdownContent;\n updateContent(markdownContent).then(() => handleChange());\n }\n }, [markdownContent, editor]);\n\n // Update editor content when diff content changes, but only if different\n // Prevent unnecessary replaceBlocks calls that reset scroll/cursor.\n const previousContentHashRef = useRef<string | null>(null);\n useEffect(() => {\n if (!processedContent || !editor) return;\n const hash = JSON.stringify(processedContent);\n if (previousContentHashRef.current === hash) return; // no changes\n const currentHash = JSON.stringify(editor.document);\n if (currentHash === hash) {\n previousContentHashRef.current = hash;\n return; // already in sync\n }\n editor.replaceBlocks(editor.document, processedContent as PartialBlock[]);\n previousContentHashRef.current = hash;\n }, [processedContent, editor]);\n\n // Handle audio received from whisper transcription\n const handleAudioReceived = useCallback(\n (message: string) => {\n try {\n // Ensure the editor has focus\n const editorElement = editorRef.current?.querySelector('[contenteditable=\"true\"]') as HTMLElement;\n if (editorElement && document.activeElement !== editorElement) {\n editorElement.focus();\n }\n\n // Insert the transcribed text at the current cursor position\n editor.insertInlineContent(message);\n } catch (error) {\n console.error(\"Error inserting transcribed text:\", error);\n // Fallback: try to insert at the end of the document\n try {\n const blocks = editor.document;\n if (blocks.length > 0) {\n const lastBlock = blocks[blocks.length - 1];\n editor.setTextCursorPosition(lastBlock.id, \"end\");\n editor.insertInlineContent(message);\n }\n } catch (fallbackError) {\n console.error(\"Fallback insertion also failed:\", fallbackError);\n }\n }\n },\n [editor],\n );\n\n return (\n <div ref={editorRef} className={cn(bordered ? \"rounded-md border\" : \"\", \"w-full\")}>\n <BlockNoteView\n editor={editor}\n onChange={handleChange}\n editable={onChange !== undefined}\n formattingToolbar={false}\n theme=\"light\"\n className={cn(`BlockNoteView ${onChange ? \"min-h-96 p-4\" : \"\"}`, className, size === \"sm\" && \"small\")}\n >\n <BlockNoteEditorFormattingToolbar />\n </BlockNoteView>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n BasicTextStyleButton,\n BlockTypeSelect,\n CreateLinkButton,\n FileCaptionButton,\n FileReplaceButton,\n FormattingToolbar,\n FormattingToolbarController,\n TextAlignButton,\n} from \"@blocknote/react\";\n\nexport function BlockNoteEditorFormattingToolbar() {\n return (\n <FormattingToolbarController\n formattingToolbar={() => (\n <FormattingToolbar>\n <BlockTypeSelect key={\"blockTypeSelect\"} />\n\n <FileCaptionButton key={\"fileCaptionButton\"} />\n <FileReplaceButton key={\"replaceFileButton\"} />\n\n <BasicTextStyleButton basicTextStyle={\"bold\"} key={\"boldStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"italic\"} key={\"italicStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"underline\"} key={\"underlineStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"strike\"} key={\"strikeStyleButton\"} />\n\n <TextAlignButton textAlignment={\"left\"} key={\"textAlignLeftButton\"} />\n <TextAlignButton textAlignment={\"center\"} key={\"textAlignCenterButton\"} />\n <TextAlignButton textAlignment={\"right\"} key={\"textAlignRightButton\"} />\n\n <CreateLinkButton key={\"createLinkButton\"} />\n </FormattingToolbar>\n )}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-SIIMOS7X.js","../src/components/editors/BlockNoteEditor.tsx","../src/components/editors/BlockNoteEditorFormattingToolbar.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-SIIMOS7X.js","sourcesContent":[null,"\"use client\";\n\nimport { BlockNoteSchema, defaultInlineContentSpecs, PartialBlock } from \"@blocknote/core\";\nimport { createReactInlineContentSpec, useCreateBlockNote } from \"@blocknote/react\";\nimport { BlockNoteView } from \"@blocknote/shadcn\";\nimport \"@blocknote/shadcn/style.css\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { S3Interface } from \"../../features/s3/data\";\nimport { UserInterface } from \"../../features/user/data\";\nimport { S3Service } from \"../../features/s3/data/s3.service\";\nimport { Button } from \"../../shadcnui\";\nimport { BlockNoteDiffUtil, BlockNoteWordDiffRendererUtil, cn } from \"../../utils\";\nimport { errorToast } from \"../errors\";\nimport { BlockNoteEditorFormattingToolbar } from \"./BlockNoteEditorFormattingToolbar\";\n\nexport type BlockNoteEditorProps = {\n id: string;\n type: string;\n initialContent?: PartialBlock[];\n onChange?: (content: any, isEmpty: boolean, hasUnresolvedDiff: boolean) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n markdownContent?: string;\n diffContent?: PartialBlock[];\n placeholder?: string;\n bordered?: boolean;\n};\n\nconst createDiffActionsInlineContentSpec = (\n handleAcceptChange: (diffId: string) => void,\n handleRejectChange: (diffId: string) => void,\n) => {\n return createReactInlineContentSpec(\n {\n type: \"diffActions\",\n propSchema: {\n diffIds: {\n default: \"\",\n },\n },\n content: \"none\",\n },\n {\n render: (props) => {\n const diffIds = props.inlineContent.props.diffIds;\n\n return (\n <span className=\"diff-actions-container mx-2 inline-flex items-center gap-1 align-middle\">\n <Button\n title=\"Accept change\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleAcceptChange(id.trim()));\n }}\n >\n <CheckIcon className=\"h-3 w-3 text-green-600\" />\n </Button>\n <Button\n title=\"Reject change\"\n className=\"mx-2 p-0\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleRejectChange(id.trim()));\n }}\n >\n <XIcon className=\"h-3 w-3 text-red-600\" />\n </Button>\n </span>\n );\n },\n },\n );\n};\n\nexport default function BlockNoteEditor({\n id,\n type,\n initialContent,\n onChange,\n size,\n className,\n markdownContent,\n diffContent,\n placeholder,\n bordered,\n}: BlockNoteEditorProps): React.JSX.Element {\n const t = useTranslations();\n const { company } = useCurrentUserContext<UserInterface>();\n\n const [acceptedChanges, setAcceptedChanges] = useState<Set<string>>(new Set());\n const [rejectedChanges, setRejectedChanges] = useState<Set<string>>(new Set());\n\n const editorRef = useRef<HTMLDivElement>(null);\n\n const handleAcceptChange = useCallback((diffId: string) => {\n setAcceptedChanges((prev) => new Set([...prev, diffId]));\n setRejectedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const handleRejectChange = useCallback((diffId: string) => {\n setRejectedChanges((prev) => new Set([...prev, diffId]));\n setAcceptedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const DiffActionsInlineContent = useMemo(\n () => createDiffActionsInlineContentSpec(handleAcceptChange, handleRejectChange),\n [handleAcceptChange, handleRejectChange],\n );\n\n const schema = useMemo(\n () =>\n BlockNoteSchema.create({\n inlineContentSpecs: {\n ...defaultInlineContentSpecs,\n diffActions: DiffActionsInlineContent,\n },\n } as any),\n [DiffActionsInlineContent],\n );\n\n const uploadImage = useCallback(\n async (file: File): Promise<string> => {\n if (!company) {\n errorToast({\n title: t(`generic.errors.upload`),\n error: t(`generic.errors.upload_description`),\n });\n throw new Error(t(`generic.errors.upload`));\n }\n\n const fileType = file.type;\n const key = `companies/${company.id}/${type}/${id}/${file.name}`;\n\n const s3: S3Interface = await S3Service.getPreSignedUrl({\n key: key,\n contentType: fileType,\n isPublic: true,\n });\n\n await fetch(s3.url, {\n method: \"PUT\",\n headers: s3.headers,\n body: file,\n });\n\n const signedImage: S3Interface = await S3Service.getSignedUrl({\n key: key,\n isPublic: true,\n });\n\n return signedImage.url;\n },\n [company, id, t],\n );\n\n // Utility: Remove trailing empty blocks for read-only display\n const removeTrailingEmptyBlocks = useCallback(\n (blocks: PartialBlock[]): PartialBlock[] => {\n if (!blocks || blocks.length === 0) return blocks;\n\n // Only remove trailing empty blocks in read-only mode\n if (onChange !== undefined) return blocks;\n\n const result = [...blocks];\n\n // Remove trailing empty paragraph blocks, but keep at least one block\n while (result.length > 1) {\n const lastBlock = result[result.length - 1];\n\n // Check if it's an empty paragraph\n const isEmptyParagraph =\n lastBlock.type === \"paragraph\" &&\n (!lastBlock.content ||\n lastBlock.content.length === 0 ||\n (Array.isArray(lastBlock.content) && lastBlock.content.every((c: any) => !c.text || c.text.trim() === \"\")));\n\n if (isEmptyParagraph) {\n result.pop();\n } else {\n break;\n }\n }\n\n return result;\n },\n [onChange],\n );\n\n const processedContent = useMemo(() => {\n if (diffContent && initialContent) {\n try {\n const diffResult = BlockNoteDiffUtil.diff(initialContent, diffContent);\n const renderedDiff = BlockNoteWordDiffRendererUtil.renderWordDiffs(\n diffResult.blocks,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n );\n return removeTrailingEmptyBlocks(renderedDiff);\n } catch (error) {\n return initialContent && Array.isArray(initialContent) && initialContent.length > 0\n ? removeTrailingEmptyBlocks(initialContent)\n : [];\n }\n }\n\n if (!initialContent) {\n return [];\n }\n\n if (!Array.isArray(initialContent)) {\n return [];\n }\n\n return initialContent.length > 0 ? removeTrailingEmptyBlocks(initialContent) : [];\n }, [\n initialContent,\n diffContent,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n removeTrailingEmptyBlocks,\n ]);\n\n const validatedInitialContent = useMemo(() => {\n if (processedContent && Array.isArray(processedContent) && processedContent.length > 0) {\n const validatedContent = processedContent.filter((block) => {\n if (!block || typeof block !== \"object\") return false;\n if (!(block as any).type) return false;\n return true;\n });\n return validatedContent.length > 0 ? (validatedContent as PartialBlock[]) : undefined;\n }\n return undefined;\n }, [processedContent]);\n\n const editor = useCreateBlockNote(\n useMemo(\n () => ({\n placeholders: {\n emptyDocument: placeholder || t(`generic.blocknote.placeholder`),\n },\n schema,\n initialContent: validatedInitialContent,\n uploadFile: uploadImage,\n }),\n [placeholder, t, schema, validatedInitialContent, uploadImage],\n ),\n );\n\n const handleChange = useCallback(async () => {\n if (!onChange) return;\n const newBlocks = editor.document;\n\n const markdownFromBlocks = (await editor.blocksToMarkdownLossy(editor.document)).trim();\n\n function hasUnresolvedDiffsRecursive(block: any): boolean {\n if (!block || typeof block !== \"object\") return false;\n let diffId = undefined;\n if (block.props && block.props.diffId) diffId = block.props.diffId;\n if (!diffId && block.attrs && block.attrs.diffId) diffId = block.attrs.diffId;\n if (diffId && !acceptedChanges.has(diffId) && !rejectedChanges.has(diffId)) {\n return true;\n }\n\n if (block.content) {\n const contentArr = Array.isArray(block.content) ? block.content : [block.content];\n for (const inline of contentArr) {\n if (inline && typeof inline === \"object\") {\n if (inline.type === \"diffActions\" && inline.props && inline.props.diffIds) {\n const ids =\n typeof inline.props.diffIds === \"string\" ? inline.props.diffIds.split(\",\") : inline.props.diffIds;\n for (const id of ids) {\n const trimmed = (id || \"\").toString().trim();\n if (trimmed && !acceptedChanges.has(trimmed) && !rejectedChanges.has(trimmed)) {\n return true;\n }\n }\n }\n if (inline.props && inline.props.diffId) {\n const diffIdInline = inline.props.diffId;\n if (diffIdInline && !acceptedChanges.has(diffIdInline) && !rejectedChanges.has(diffIdInline)) {\n return true;\n }\n }\n if (inline.children && Array.isArray(inline.children)) {\n for (const child of inline.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n }\n }\n }\n if (Array.isArray(block.children)) {\n for (const child of block.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n return false;\n }\n\n let hasUnresolvedDiff = false;\n if (Array.isArray(newBlocks)) {\n hasUnresolvedDiff = newBlocks.some((block: any) => hasUnresolvedDiffsRecursive(block));\n }\n\n onChange(newBlocks, !markdownFromBlocks.length, hasUnresolvedDiff);\n }, [editor, onChange, id, acceptedChanges, rejectedChanges]);\n\n // Utility: deep equality for arrays of blocks\n const areBlocksEqual = (a: any[], b: any[]): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n };\n\n // Only initialize from markdownContent once per value, and only if different\n const hasInitializedFromMarkdown = useRef<string | null>(null);\n useEffect(() => {\n const updateContent = async (markdown: string) => {\n const blocks = await editor.tryParseMarkdownToBlocks(markdown);\n if (!areBlocksEqual(blocks, editor.document)) {\n editor.replaceBlocks(editor.document, blocks);\n }\n };\n\n if (markdownContent && hasInitializedFromMarkdown.current !== markdownContent) {\n hasInitializedFromMarkdown.current = markdownContent;\n updateContent(markdownContent).then(() => handleChange());\n }\n }, [markdownContent, editor]);\n\n // Update editor content when diff content changes, but only if different\n // Prevent unnecessary replaceBlocks calls that reset scroll/cursor.\n const previousContentHashRef = useRef<string | null>(null);\n useEffect(() => {\n if (!processedContent || !editor) return;\n const hash = JSON.stringify(processedContent);\n if (previousContentHashRef.current === hash) return; // no changes\n const currentHash = JSON.stringify(editor.document);\n if (currentHash === hash) {\n previousContentHashRef.current = hash;\n return; // already in sync\n }\n editor.replaceBlocks(editor.document, processedContent as PartialBlock[]);\n previousContentHashRef.current = hash;\n }, [processedContent, editor]);\n\n // Handle audio received from whisper transcription\n const handleAudioReceived = useCallback(\n (message: string) => {\n try {\n // Ensure the editor has focus\n const editorElement = editorRef.current?.querySelector('[contenteditable=\"true\"]') as HTMLElement;\n if (editorElement && document.activeElement !== editorElement) {\n editorElement.focus();\n }\n\n // Insert the transcribed text at the current cursor position\n editor.insertInlineContent(message);\n } catch (error) {\n console.error(\"Error inserting transcribed text:\", error);\n // Fallback: try to insert at the end of the document\n try {\n const blocks = editor.document;\n if (blocks.length > 0) {\n const lastBlock = blocks[blocks.length - 1];\n editor.setTextCursorPosition(lastBlock.id, \"end\");\n editor.insertInlineContent(message);\n }\n } catch (fallbackError) {\n console.error(\"Fallback insertion also failed:\", fallbackError);\n }\n }\n },\n [editor],\n );\n\n return (\n <div ref={editorRef} className={cn(bordered ? \"rounded-md border\" : \"\", \"w-full\")}>\n <BlockNoteView\n editor={editor}\n onChange={handleChange}\n editable={onChange !== undefined}\n formattingToolbar={false}\n theme=\"light\"\n className={cn(`BlockNoteView ${onChange ? \"min-h-96 p-4\" : \"\"}`, className, size === \"sm\" && \"small\")}\n >\n <BlockNoteEditorFormattingToolbar />\n </BlockNoteView>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n BasicTextStyleButton,\n BlockTypeSelect,\n CreateLinkButton,\n FileCaptionButton,\n FileReplaceButton,\n FormattingToolbar,\n FormattingToolbarController,\n TextAlignButton,\n} from \"@blocknote/react\";\n\nexport function BlockNoteEditorFormattingToolbar() {\n return (\n <FormattingToolbarController\n formattingToolbar={() => (\n <FormattingToolbar>\n <BlockTypeSelect key={\"blockTypeSelect\"} />\n\n <FileCaptionButton key={\"fileCaptionButton\"} />\n <FileReplaceButton key={\"replaceFileButton\"} />\n\n <BasicTextStyleButton basicTextStyle={\"bold\"} key={\"boldStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"italic\"} key={\"italicStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"underline\"} key={\"underlineStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"strike\"} key={\"strikeStyleButton\"} />\n\n <TextAlignButton textAlignment={\"left\"} key={\"textAlignLeftButton\"} />\n <TextAlignButton textAlignment={\"center\"} key={\"textAlignCenterButton\"} />\n <TextAlignButton textAlignment={\"right\"} key={\"textAlignRightButton\"} />\n\n <CreateLinkButton key={\"createLinkButton\"} />\n </FormattingToolbar>\n )}\n />\n );\n}\n"]}
|
|
@@ -7594,7 +7594,7 @@ __name(AllowedUsersDetails, "AllowedUsersDetails");
|
|
|
7594
7594
|
import dynamic from "next/dynamic";
|
|
7595
7595
|
import React37 from "react";
|
|
7596
7596
|
import { jsx as jsx96 } from "react/jsx-runtime";
|
|
7597
|
-
var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-
|
|
7597
|
+
var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-F6DZNT6A.mjs"), {
|
|
7598
7598
|
ssr: false
|
|
7599
7599
|
});
|
|
7600
7600
|
var BlockNoteEditorContainer = React37.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
|
|
@@ -9458,16 +9458,43 @@ function PageContainerContentDetails({ items, section, module, id }) {
|
|
|
9458
9458
|
__name(PageContainerContentDetails, "PageContainerContentDetails");
|
|
9459
9459
|
|
|
9460
9460
|
// src/components/pages/PageContentContainer.tsx
|
|
9461
|
+
import { useEffect as useEffect29, useState as useState37 } from "react";
|
|
9461
9462
|
import { jsx as jsx121, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
9462
9463
|
function PageContentContainer({ details, footer, content }) {
|
|
9463
|
-
|
|
9464
|
-
|
|
9465
|
-
|
|
9466
|
-
|
|
9467
|
-
|
|
9468
|
-
|
|
9469
|
-
|
|
9470
|
-
|
|
9464
|
+
const [mounted, setMounted] = useState37(false);
|
|
9465
|
+
const isMobile = useIsMobile();
|
|
9466
|
+
useEffect29(() => {
|
|
9467
|
+
setMounted(true);
|
|
9468
|
+
}, []);
|
|
9469
|
+
const isReady = mounted && isMobile !== void 0;
|
|
9470
|
+
if (!isReady) {
|
|
9471
|
+
return /* @__PURE__ */ jsx121("div", { className: "flex h-[calc(100vh-(--spacing(16)))] w-full" });
|
|
9472
|
+
}
|
|
9473
|
+
return /* @__PURE__ */ jsx121("div", { className: "flex h-[calc(100vh-(--spacing(16)))] w-full transition-opacity duration-150 animate-in fade-in", children: /* @__PURE__ */ jsxs73(
|
|
9474
|
+
ResizablePanelGroup,
|
|
9475
|
+
{
|
|
9476
|
+
direction: isMobile ? "vertical" : "horizontal",
|
|
9477
|
+
className: "items-stretch",
|
|
9478
|
+
autoSaveId: isMobile ? void 0 : "page-content-layout",
|
|
9479
|
+
children: [
|
|
9480
|
+
/* @__PURE__ */ jsx121(
|
|
9481
|
+
ResizablePanel,
|
|
9482
|
+
{
|
|
9483
|
+
id: "left-panel",
|
|
9484
|
+
defaultSize: isMobile ? 10 : 32,
|
|
9485
|
+
minSize: isMobile ? 10 : 20,
|
|
9486
|
+
maxSize: isMobile ? 90 : 40,
|
|
9487
|
+
children: /* @__PURE__ */ jsxs73("div", { className: `@container flex h-full flex-col ${isMobile ? "pb-4" : "pr-4"}`, children: [
|
|
9488
|
+
/* @__PURE__ */ jsx121("div", { className: "flex-1 overflow-y-auto", children: details }),
|
|
9489
|
+
footer && /* @__PURE__ */ jsx121("div", { className: "flex flex-col gap-y-2 pt-2 pb-2", children: footer })
|
|
9490
|
+
] })
|
|
9491
|
+
}
|
|
9492
|
+
),
|
|
9493
|
+
/* @__PURE__ */ jsx121(ResizableHandle, { withHandle: true }),
|
|
9494
|
+
/* @__PURE__ */ jsx121(ResizablePanel, { id: "right-panel", className: isMobile ? "pt-4" : "pl-4", children: /* @__PURE__ */ jsx121("div", { className: "h-full overflow-y-auto", children: content }) })
|
|
9495
|
+
]
|
|
9496
|
+
}
|
|
9497
|
+
) });
|
|
9471
9498
|
}
|
|
9472
9499
|
__name(PageContentContainer, "PageContentContainer");
|
|
9473
9500
|
|
|
@@ -9562,10 +9589,10 @@ function useJsonApiConfigOptional() {
|
|
|
9562
9589
|
__name(useJsonApiConfigOptional, "useJsonApiConfigOptional");
|
|
9563
9590
|
|
|
9564
9591
|
// src/client/context/JsonApiProvider.tsx
|
|
9565
|
-
import { useEffect as
|
|
9592
|
+
import { useEffect as useEffect30, useMemo as useMemo10 } from "react";
|
|
9566
9593
|
import { jsx as jsx126 } from "react/jsx-runtime";
|
|
9567
9594
|
function JsonApiProvider({ config, children }) {
|
|
9568
|
-
|
|
9595
|
+
useEffect30(() => {
|
|
9569
9596
|
if (config.bootstrapper) {
|
|
9570
9597
|
config.bootstrapper();
|
|
9571
9598
|
}
|
|
@@ -9576,12 +9603,12 @@ function JsonApiProvider({ config, children }) {
|
|
|
9576
9603
|
__name(JsonApiProvider, "JsonApiProvider");
|
|
9577
9604
|
|
|
9578
9605
|
// src/client/hooks/useJsonApiGet.ts
|
|
9579
|
-
import { useState as
|
|
9606
|
+
import { useState as useState38, useEffect as useEffect31, useCallback as useCallback13, useRef as useRef13 } from "react";
|
|
9580
9607
|
function useJsonApiGet(params) {
|
|
9581
|
-
const [data, setData] =
|
|
9582
|
-
const [loading, setLoading] =
|
|
9583
|
-
const [error, setError] =
|
|
9584
|
-
const [response, setResponse] =
|
|
9608
|
+
const [data, setData] = useState38(null);
|
|
9609
|
+
const [loading, setLoading] = useState38(false);
|
|
9610
|
+
const [error, setError] = useState38(null);
|
|
9611
|
+
const [response, setResponse] = useState38(null);
|
|
9585
9612
|
const isMounted = useRef13(true);
|
|
9586
9613
|
const fetchData = useCallback13(async () => {
|
|
9587
9614
|
if (params.options?.enabled === false) return;
|
|
@@ -9654,7 +9681,7 @@ function useJsonApiGet(params) {
|
|
|
9654
9681
|
}
|
|
9655
9682
|
}
|
|
9656
9683
|
}, [response]);
|
|
9657
|
-
|
|
9684
|
+
useEffect31(() => {
|
|
9658
9685
|
isMounted.current = true;
|
|
9659
9686
|
fetchData();
|
|
9660
9687
|
return () => {
|
|
@@ -9676,12 +9703,12 @@ function useJsonApiGet(params) {
|
|
|
9676
9703
|
__name(useJsonApiGet, "useJsonApiGet");
|
|
9677
9704
|
|
|
9678
9705
|
// src/client/hooks/useJsonApiMutation.ts
|
|
9679
|
-
import { useState as
|
|
9706
|
+
import { useState as useState39, useCallback as useCallback14 } from "react";
|
|
9680
9707
|
function useJsonApiMutation(config) {
|
|
9681
|
-
const [data, setData] =
|
|
9682
|
-
const [loading, setLoading] =
|
|
9683
|
-
const [error, setError] =
|
|
9684
|
-
const [response, setResponse] =
|
|
9708
|
+
const [data, setData] = useState39(null);
|
|
9709
|
+
const [loading, setLoading] = useState39(false);
|
|
9710
|
+
const [error, setError] = useState39(null);
|
|
9711
|
+
const [response, setResponse] = useState39(null);
|
|
9685
9712
|
const reset = useCallback14(() => {
|
|
9686
9713
|
setData(null);
|
|
9687
9714
|
setLoading(false);
|
|
@@ -9906,11 +9933,11 @@ var useRoleTableStructure = /* @__PURE__ */ __name((params) => {
|
|
|
9906
9933
|
}, "useRoleTableStructure");
|
|
9907
9934
|
|
|
9908
9935
|
// src/features/user/hooks/useUserSearch.ts
|
|
9909
|
-
import { useCallback as useCallback15, useEffect as
|
|
9936
|
+
import { useCallback as useCallback15, useEffect as useEffect32, useRef as useRef14, useState as useState40 } from "react";
|
|
9910
9937
|
var useUserSearch = /* @__PURE__ */ __name(() => {
|
|
9911
|
-
const [users, setUsers] =
|
|
9912
|
-
const [searchQuery, setSearchQuery] =
|
|
9913
|
-
const [isLoading, setIsLoading] =
|
|
9938
|
+
const [users, setUsers] = useState40([]);
|
|
9939
|
+
const [searchQuery, setSearchQuery] = useState40("");
|
|
9940
|
+
const [isLoading, setIsLoading] = useState40(false);
|
|
9914
9941
|
const searchQueryRef = useRef14("");
|
|
9915
9942
|
const loadUsers = useCallback15(
|
|
9916
9943
|
async (search) => {
|
|
@@ -9929,7 +9956,7 @@ var useUserSearch = /* @__PURE__ */ __name(() => {
|
|
|
9929
9956
|
[users.length]
|
|
9930
9957
|
);
|
|
9931
9958
|
const debouncedLoadUsers = useDebounce(loadUsers, 500);
|
|
9932
|
-
|
|
9959
|
+
useEffect32(() => {
|
|
9933
9960
|
if (searchQuery !== searchQueryRef.current) {
|
|
9934
9961
|
setIsLoading(true);
|
|
9935
9962
|
debouncedLoadUsers(searchQuery);
|
|
@@ -10165,15 +10192,15 @@ import { memo, useMemo as useMemo16 } from "react";
|
|
|
10165
10192
|
// src/components/tables/ContentTableSearch.tsx
|
|
10166
10193
|
import { RefreshCw, Search, X } from "lucide-react";
|
|
10167
10194
|
import { useTranslations as useTranslations45 } from "next-intl";
|
|
10168
|
-
import { useCallback as useCallback16, useEffect as
|
|
10195
|
+
import { useCallback as useCallback16, useEffect as useEffect33, useRef as useRef15, useState as useState41 } from "react";
|
|
10169
10196
|
import { jsx as jsx131, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
10170
10197
|
function ContentTableSearch({ data }) {
|
|
10171
10198
|
const t = useTranslations45();
|
|
10172
10199
|
const searchTermRef = useRef15("");
|
|
10173
10200
|
const inputRef = useRef15(null);
|
|
10174
|
-
const [searchTerm, setSearchTerm] =
|
|
10175
|
-
const [isFocused, setIsFocused] =
|
|
10176
|
-
const [isSearching, setIsSearching] =
|
|
10201
|
+
const [searchTerm, setSearchTerm] = useState41("");
|
|
10202
|
+
const [isFocused, setIsFocused] = useState41(false);
|
|
10203
|
+
const [isSearching, setIsSearching] = useState41(false);
|
|
10177
10204
|
const isExpanded = isFocused || searchTerm.length > 0;
|
|
10178
10205
|
const search = useCallback16(
|
|
10179
10206
|
async (searchedTerm) => {
|
|
@@ -10188,7 +10215,7 @@ function ContentTableSearch({ data }) {
|
|
|
10188
10215
|
[searchTermRef, data]
|
|
10189
10216
|
);
|
|
10190
10217
|
const updateSearchTerm = useDebounce(search, 500);
|
|
10191
|
-
|
|
10218
|
+
useEffect33(() => {
|
|
10192
10219
|
setIsSearching(true);
|
|
10193
10220
|
updateSearchTerm(searchTerm);
|
|
10194
10221
|
}, [updateSearchTerm, searchTerm]);
|
|
@@ -10340,13 +10367,13 @@ var ContentListTable = memo(/* @__PURE__ */ __name(function ContentListTable2(pr
|
|
|
10340
10367
|
import Image10 from "next/image";
|
|
10341
10368
|
|
|
10342
10369
|
// src/features/auth/contexts/AuthContext.tsx
|
|
10343
|
-
import { createContext as createContext16, useContext as useContext16, useMemo as useMemo17, useState as
|
|
10370
|
+
import { createContext as createContext16, useContext as useContext16, useMemo as useMemo17, useState as useState43 } from "react";
|
|
10344
10371
|
|
|
10345
10372
|
// src/features/auth/components/forms/Register.tsx
|
|
10346
10373
|
import { zodResolver as zodResolver5 } from "@hookform/resolvers/zod";
|
|
10347
10374
|
import { useTranslations as useTranslations46 } from "next-intl";
|
|
10348
10375
|
import Image9 from "next/image";
|
|
10349
|
-
import { useState as
|
|
10376
|
+
import { useState as useState42 } from "react";
|
|
10350
10377
|
import { useForm as useForm5 } from "react-hook-form";
|
|
10351
10378
|
import { v4 as v44 } from "uuid";
|
|
10352
10379
|
import { z as z5 } from "zod";
|
|
@@ -10354,7 +10381,7 @@ import { Fragment as Fragment20, jsx as jsx133, jsxs as jsxs78 } from "react/jsx
|
|
|
10354
10381
|
function Register() {
|
|
10355
10382
|
const t = useTranslations46();
|
|
10356
10383
|
const { setComponentType } = useAuthContext();
|
|
10357
|
-
const [showConfirmation, setShowConfirmation] =
|
|
10384
|
+
const [showConfirmation, setShowConfirmation] = useState42(false);
|
|
10358
10385
|
const formSchema = z5.object({
|
|
10359
10386
|
company: z5.string().min(1, {
|
|
10360
10387
|
message: t(`generic.errors.missing_company_name`)
|
|
@@ -10478,8 +10505,8 @@ var AuthContextProvider = /* @__PURE__ */ __name(({
|
|
|
10478
10505
|
initialComponentType,
|
|
10479
10506
|
initialParams
|
|
10480
10507
|
}) => {
|
|
10481
|
-
const [componentType, setComponentType] =
|
|
10482
|
-
const [params, setParams] =
|
|
10508
|
+
const [componentType, setComponentType] = useState43(initialComponentType);
|
|
10509
|
+
const [params, setParams] = useState43(initialParams);
|
|
10483
10510
|
const activeComponent = useMemo17(() => {
|
|
10484
10511
|
if (componentType === void 0) return null;
|
|
10485
10512
|
switch (componentType) {
|
|
@@ -10572,17 +10599,17 @@ __name(LandingComponent, "LandingComponent");
|
|
|
10572
10599
|
import { zodResolver as zodResolver6 } from "@hookform/resolvers/zod";
|
|
10573
10600
|
import { useTranslations as useTranslations48 } from "next-intl";
|
|
10574
10601
|
import Image12 from "next/image";
|
|
10575
|
-
import { useEffect as
|
|
10602
|
+
import { useEffect as useEffect34, useState as useState44 } from "react";
|
|
10576
10603
|
import { useForm as useForm6 } from "react-hook-form";
|
|
10577
10604
|
import { toast as toast7 } from "sonner";
|
|
10578
10605
|
import { z as z6 } from "zod";
|
|
10579
10606
|
import { Fragment as Fragment22, jsx as jsx137, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
10580
10607
|
function AcceptInvitation() {
|
|
10581
10608
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
10582
|
-
const [showConfirmation, setShowConfirmation] =
|
|
10583
|
-
const [error, setError] =
|
|
10609
|
+
const [showConfirmation, setShowConfirmation] = useState44(false);
|
|
10610
|
+
const [error, setError] = useState44(void 0);
|
|
10584
10611
|
const t = useTranslations48();
|
|
10585
|
-
|
|
10612
|
+
useEffect34(() => {
|
|
10586
10613
|
async function validateCode(code) {
|
|
10587
10614
|
try {
|
|
10588
10615
|
const payload = {
|
|
@@ -10675,15 +10702,15 @@ __name(AcceptInvitation, "AcceptInvitation");
|
|
|
10675
10702
|
// src/features/auth/components/forms/ActivateAccount.tsx
|
|
10676
10703
|
import { useTranslations as useTranslations49 } from "next-intl";
|
|
10677
10704
|
import Image13 from "next/image";
|
|
10678
|
-
import { useEffect as
|
|
10705
|
+
import { useEffect as useEffect35, useState as useState45 } from "react";
|
|
10679
10706
|
import { toast as toast8 } from "sonner";
|
|
10680
10707
|
import { Fragment as Fragment23, jsx as jsx138, jsxs as jsxs81 } from "react/jsx-runtime";
|
|
10681
10708
|
function ActivateAccount() {
|
|
10682
10709
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
10683
|
-
const [showConfirmation, setShowConfirmation] =
|
|
10684
|
-
const [error, setError] =
|
|
10710
|
+
const [showConfirmation, setShowConfirmation] = useState45(false);
|
|
10711
|
+
const [error, setError] = useState45(void 0);
|
|
10685
10712
|
const t = useTranslations49();
|
|
10686
|
-
|
|
10713
|
+
useEffect35(() => {
|
|
10687
10714
|
async function ActivateAccount2(code) {
|
|
10688
10715
|
try {
|
|
10689
10716
|
const payload = {
|
|
@@ -10724,12 +10751,12 @@ function ActivateAccount() {
|
|
|
10724
10751
|
__name(ActivateAccount, "ActivateAccount");
|
|
10725
10752
|
|
|
10726
10753
|
// src/features/auth/components/forms/Cookies.tsx
|
|
10727
|
-
import { useEffect as
|
|
10754
|
+
import { useEffect as useEffect36, useState as useState46 } from "react";
|
|
10728
10755
|
function Cookies({ dehydratedAuth, page }) {
|
|
10729
10756
|
const { setUser } = useCurrentUserContext();
|
|
10730
10757
|
const router = useI18nRouter();
|
|
10731
|
-
const [hasSaved, setHasSaved] =
|
|
10732
|
-
|
|
10758
|
+
const [hasSaved, setHasSaved] = useState46(false);
|
|
10759
|
+
useEffect36(() => {
|
|
10733
10760
|
if (hasSaved) return;
|
|
10734
10761
|
async function saveTokenOnServer() {
|
|
10735
10762
|
await AuthService.saveToken({ dehydratedAuth });
|
|
@@ -10752,14 +10779,14 @@ __name(Cookies, "Cookies");
|
|
|
10752
10779
|
import { zodResolver as zodResolver7 } from "@hookform/resolvers/zod";
|
|
10753
10780
|
import { useTranslations as useTranslations50 } from "next-intl";
|
|
10754
10781
|
import Image14 from "next/image";
|
|
10755
|
-
import { useState as
|
|
10782
|
+
import { useState as useState47 } from "react";
|
|
10756
10783
|
import { useForm as useForm7 } from "react-hook-form";
|
|
10757
10784
|
import { z as z7 } from "zod";
|
|
10758
10785
|
import { Fragment as Fragment24, jsx as jsx139, jsxs as jsxs82 } from "react/jsx-runtime";
|
|
10759
10786
|
function ForgotPassword() {
|
|
10760
10787
|
const t = useTranslations50();
|
|
10761
10788
|
const { setComponentType } = useAuthContext();
|
|
10762
|
-
const [showConfirmation, setShowConfirmation] =
|
|
10789
|
+
const [showConfirmation, setShowConfirmation] = useState47(false);
|
|
10763
10790
|
const formSchema = z7.object({
|
|
10764
10791
|
email: z7.string().email({
|
|
10765
10792
|
message: t(`generic.errors.invalid_email`)
|
|
@@ -10920,11 +10947,11 @@ function Login() {
|
|
|
10920
10947
|
__name(Login, "Login");
|
|
10921
10948
|
|
|
10922
10949
|
// src/features/auth/components/forms/Logout.tsx
|
|
10923
|
-
import { useEffect as
|
|
10950
|
+
import { useEffect as useEffect37 } from "react";
|
|
10924
10951
|
import { Fragment as Fragment26, jsx as jsx141 } from "react/jsx-runtime";
|
|
10925
10952
|
function Logout() {
|
|
10926
10953
|
const generateUrl = usePageUrlGenerator();
|
|
10927
|
-
|
|
10954
|
+
useEffect37(() => {
|
|
10928
10955
|
const logOut = /* @__PURE__ */ __name(async () => {
|
|
10929
10956
|
await AuthService.logout();
|
|
10930
10957
|
window.location.href = generateUrl({ page: `/` });
|
|
@@ -10937,7 +10964,7 @@ __name(Logout, "Logout");
|
|
|
10937
10964
|
|
|
10938
10965
|
// src/features/auth/components/forms/RefreshUser.tsx
|
|
10939
10966
|
import { deleteCookie as deleteCookie2, getCookie as getCookie2 } from "cookies-next";
|
|
10940
|
-
import { useEffect as
|
|
10967
|
+
import { useEffect as useEffect38 } from "react";
|
|
10941
10968
|
function RefreshUser() {
|
|
10942
10969
|
const { setUser } = useCurrentUserContext();
|
|
10943
10970
|
const loadFullUser = /* @__PURE__ */ __name(async () => {
|
|
@@ -10958,7 +10985,7 @@ function RefreshUser() {
|
|
|
10958
10985
|
deleteCookie2("reloadData");
|
|
10959
10986
|
}
|
|
10960
10987
|
}, "loadFullUser");
|
|
10961
|
-
|
|
10988
|
+
useEffect38(() => {
|
|
10962
10989
|
const reloadData = getCookie2("reloadData");
|
|
10963
10990
|
if (reloadData !== void 0) loadFullUser();
|
|
10964
10991
|
}, []);
|
|
@@ -10970,17 +10997,17 @@ __name(RefreshUser, "RefreshUser");
|
|
|
10970
10997
|
import { zodResolver as zodResolver9 } from "@hookform/resolvers/zod";
|
|
10971
10998
|
import { useTranslations as useTranslations52 } from "next-intl";
|
|
10972
10999
|
import Image16 from "next/image";
|
|
10973
|
-
import { useEffect as
|
|
11000
|
+
import { useEffect as useEffect39, useState as useState48 } from "react";
|
|
10974
11001
|
import { useForm as useForm9 } from "react-hook-form";
|
|
10975
11002
|
import { toast as toast9 } from "sonner";
|
|
10976
11003
|
import { z as z9 } from "zod";
|
|
10977
11004
|
import { Fragment as Fragment27, jsx as jsx142, jsxs as jsxs84 } from "react/jsx-runtime";
|
|
10978
11005
|
function ResetPassword() {
|
|
10979
11006
|
const { setComponentType, params, setParams } = useAuthContext();
|
|
10980
|
-
const [showConfirmation, setShowConfirmation] =
|
|
10981
|
-
const [error, setError] =
|
|
11007
|
+
const [showConfirmation, setShowConfirmation] = useState48(false);
|
|
11008
|
+
const [error, setError] = useState48(void 0);
|
|
10982
11009
|
const t = useTranslations52();
|
|
10983
|
-
|
|
11010
|
+
useEffect39(() => {
|
|
10984
11011
|
async function validateResetPasswordCode(code) {
|
|
10985
11012
|
try {
|
|
10986
11013
|
const payload = {
|
|
@@ -11262,7 +11289,7 @@ __name(NotificationsListContainer, "NotificationsListContainer");
|
|
|
11262
11289
|
// src/features/notification/components/modals/NotificationModal.tsx
|
|
11263
11290
|
import { BellIcon } from "lucide-react";
|
|
11264
11291
|
import { useTranslations as useTranslations58 } from "next-intl";
|
|
11265
|
-
import { Fragment as Fragment29, useCallback as useCallback17, useEffect as
|
|
11292
|
+
import { Fragment as Fragment29, useCallback as useCallback17, useEffect as useEffect40, useMemo as useMemo18, useRef as useRef16, useState as useState49 } from "react";
|
|
11266
11293
|
import { toast as toast10 } from "sonner";
|
|
11267
11294
|
import { jsx as jsx149, jsxs as jsxs89 } from "react/jsx-runtime";
|
|
11268
11295
|
function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
@@ -11279,7 +11306,7 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
11279
11306
|
const { socketNotifications, removeSocketNotification, clearSocketNotifications } = useSocketContext();
|
|
11280
11307
|
const t = useTranslations58();
|
|
11281
11308
|
const generateUrl = usePageUrlGenerator();
|
|
11282
|
-
const [newNotifications, setNewNotifications] =
|
|
11309
|
+
const [newNotifications, setNewNotifications] = useState49(false);
|
|
11283
11310
|
const preventAutoClose = useRef16(false);
|
|
11284
11311
|
const circuitBreakerRef = useRef16({
|
|
11285
11312
|
count: 0,
|
|
@@ -11308,7 +11335,7 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
11308
11335
|
unreadIds: unreadNotifications2.map((notif) => notif.id)
|
|
11309
11336
|
};
|
|
11310
11337
|
}, [notifications]);
|
|
11311
|
-
|
|
11338
|
+
useEffect40(() => {
|
|
11312
11339
|
setNewNotifications(unreadCount > 0);
|
|
11313
11340
|
}, [unreadCount]);
|
|
11314
11341
|
const processSocketNotificationsRef = useRef16(null);
|
|
@@ -11351,7 +11378,7 @@ function NotificationModalContent({ isOpen, setIsOpen }) {
|
|
|
11351
11378
|
generateUrl,
|
|
11352
11379
|
checkCircuitBreaker
|
|
11353
11380
|
]);
|
|
11354
|
-
|
|
11381
|
+
useEffect40(() => {
|
|
11355
11382
|
if (processSocketNotificationsRef.current) {
|
|
11356
11383
|
clearTimeout(processSocketNotificationsRef.current);
|
|
11357
11384
|
}
|
|
@@ -11495,13 +11522,13 @@ __name(FormRoles, "FormRoles");
|
|
|
11495
11522
|
|
|
11496
11523
|
// src/features/role/components/forms/RemoveUserFromRole.tsx
|
|
11497
11524
|
import { useTranslations as useTranslations61 } from "next-intl";
|
|
11498
|
-
import { useEffect as
|
|
11525
|
+
import { useEffect as useEffect41, useState as useState50 } from "react";
|
|
11499
11526
|
import { Fragment as Fragment32, jsx as jsx154, jsxs as jsxs92 } from "react/jsx-runtime";
|
|
11500
11527
|
function RemoveUserFromRole({ role, user, refresh }) {
|
|
11501
|
-
const [open, setOpen] =
|
|
11502
|
-
const [canRemove, setCanRemove] =
|
|
11528
|
+
const [open, setOpen] = useState50(false);
|
|
11529
|
+
const [canRemove, setCanRemove] = useState50(false);
|
|
11503
11530
|
const t = useTranslations61();
|
|
11504
|
-
|
|
11531
|
+
useEffect41(() => {
|
|
11505
11532
|
async function checkCompanyAdminDeletability() {
|
|
11506
11533
|
const roleUsers = await UserService.findAllUsersByRole({
|
|
11507
11534
|
roleId: role.id
|
|
@@ -11571,14 +11598,14 @@ __name(RemoveUserFromRole, "RemoveUserFromRole");
|
|
|
11571
11598
|
// src/features/role/components/forms/UserRoleAdd.tsx
|
|
11572
11599
|
import { PlusCircle } from "lucide-react";
|
|
11573
11600
|
import { useTranslations as useTranslations62 } from "next-intl";
|
|
11574
|
-
import { useCallback as useCallback18, useEffect as
|
|
11601
|
+
import { useCallback as useCallback18, useEffect as useEffect42, useRef as useRef17, useState as useState51 } from "react";
|
|
11575
11602
|
import { toast as toast11 } from "sonner";
|
|
11576
11603
|
import { Fragment as Fragment33, jsx as jsx155, jsxs as jsxs93 } from "react/jsx-runtime";
|
|
11577
11604
|
function UserRoleAdd({ user, refresh }) {
|
|
11578
|
-
const [open, setOpen] =
|
|
11605
|
+
const [open, setOpen] = useState51(false);
|
|
11579
11606
|
const inputRef = useRef17(null);
|
|
11580
|
-
const [searchTerm, setSearchTerm] =
|
|
11581
|
-
const [roles, setRoles] =
|
|
11607
|
+
const [searchTerm, setSearchTerm] = useState51("");
|
|
11608
|
+
const [roles, setRoles] = useState51([]);
|
|
11582
11609
|
const t = useTranslations62();
|
|
11583
11610
|
const addUserToRole = /* @__PURE__ */ __name(async (role) => {
|
|
11584
11611
|
await RoleService.addUserToRole({
|
|
@@ -11614,10 +11641,10 @@ function UserRoleAdd({ user, refresh }) {
|
|
|
11614
11641
|
[searchTerm, user]
|
|
11615
11642
|
);
|
|
11616
11643
|
const updateSearchTerm = useDebounce(searchRoles, 500);
|
|
11617
|
-
|
|
11644
|
+
useEffect42(() => {
|
|
11618
11645
|
if (open) updateSearchTerm(searchTerm);
|
|
11619
11646
|
}, [open, searchTerm]);
|
|
11620
|
-
|
|
11647
|
+
useEffect42(() => {
|
|
11621
11648
|
if (open) searchRoles("");
|
|
11622
11649
|
}, [open]);
|
|
11623
11650
|
return /* @__PURE__ */ jsxs93(Fragment33, { children: [
|
|
@@ -12088,4 +12115,4 @@ export {
|
|
|
12088
12115
|
useUserTableStructure,
|
|
12089
12116
|
useContentTableStructure
|
|
12090
12117
|
};
|
|
12091
|
-
//# sourceMappingURL=chunk-
|
|
12118
|
+
//# sourceMappingURL=chunk-PH4P2DR6.mjs.map
|