@harperfast/harper-pro 5.0.17 → 5.0.19
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/core/resources/RecordEncoder.ts +15 -12
- package/core/resources/RocksTransactionLogStore.ts +47 -22
- package/core/resources/Table.ts +98 -32
- package/core/resources/auditStore.ts +87 -6
- package/core/resources/databases.ts +67 -7
- package/dist/cloneNode/cloneNode.js +13 -8
- package/dist/cloneNode/cloneNode.js.map +1 -1
- package/dist/core/resources/RecordEncoder.js +1 -1
- package/dist/core/resources/RecordEncoder.js.map +1 -1
- package/dist/core/resources/RocksTransactionLogStore.js +80 -21
- package/dist/core/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/core/resources/Table.js +96 -35
- package/dist/core/resources/Table.js.map +1 -1
- package/dist/core/resources/auditStore.js +83 -6
- package/dist/core/resources/auditStore.js.map +1 -1
- package/dist/core/resources/databases.js +68 -5
- package/dist/core/resources/databases.js.map +1 -1
- package/dist/replication/replicationConnection.js +63 -18
- package/dist/replication/replicationConnection.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/replication/replicationConnection.ts +66 -20
- package/studio/web/assets/{index-DhLu-DHX.js → index-BIjBsaWw.js} +5 -5
- package/studio/web/assets/{index-DhLu-DHX.js.map → index-BIjBsaWw.js.map} +1 -1
- package/studio/web/assets/{index.lazy-DBjOisCz.js → index.lazy-DN6bSQzR.js} +2 -2
- package/studio/web/assets/{index.lazy-DBjOisCz.js.map → index.lazy-DN6bSQzR.js.map} +1 -1
- package/studio/web/assets/{profile-DSL-499E.js → profile-Dyrp-ZIJ.js} +2 -2
- package/studio/web/assets/{profile-DSL-499E.js.map → profile-Dyrp-ZIJ.js.map} +1 -1
- package/studio/web/assets/{status-BRW5QtzY.js → status-BrfTnnpt.js} +2 -2
- package/studio/web/assets/{status-BRW5QtzY.js.map → status-BrfTnnpt.js.map} +1 -1
- package/studio/web/index.html +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-react-Dj1rnUQ4.js","assets/rolldown-runtime-BYbx6iT9.js","assets/vendor-datadog-D28PhZSI.js","assets/vendor-core-f32UXcS5.js","assets/vendor-misc-DKMU5hOJ.js","assets/vendor-markdown-E78pex-p.js","assets/vendor-html-Bv6KjEJU.js","assets/vendor-monaco-B6UzVkIC.js","assets/vendor-charts-FM0f3SSx.js","assets/vendor-react-CrIa5r46.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{t}from"./button-V4IQ8FFq.js";import{Br as n,Ca as r,Fa as i,Pa as a,ga as o,ja as s,ka as c}from"./vendor-react-Dj1rnUQ4.js";import{r as l}from"./useInstanceClient-CdXj_Str.js";import{i as u}from"./vendor-datadog-D28PhZSI.js";import{L as d,a as f,b as p,i as m,o as h,r as g,y as _}from"./index-
|
|
2
|
+
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{t}from"./button-V4IQ8FFq.js";import{Br as n,Ca as r,Fa as i,Pa as a,ga as o,ja as s,ka as c}from"./vendor-react-Dj1rnUQ4.js";import{r as l}from"./useInstanceClient-CdXj_Str.js";import{i as u}from"./vendor-datadog-D28PhZSI.js";import{L as d,a as f,b as p,i as m,o as h,r as g,y as _}from"./index-BIjBsaWw.js";var v=[{fn:{requestSnippetGenerator_fetch:e=>{let t=new URL(e.get(`url`)),n=!1,r=e.get(`headers`);r&&r.size&&r.map((e,t)=>{n||=/^content-type$/i.test(t)&&/^multipart\/form-data$/i.test(e)});let i=e.get(`body`),a=e.get(`method`);if(i){if(n&&[`POST`,`PUT`,`PATCH`].includes(a))return`throw new Error("Currently unsupported content-type: /^multipart\\/form-data$/i");`;typeof i!=`string`&&(i=JSON.stringify(i,null,` `))}else !i&&a===`POST`&&(i=``);let o="`"+(i||``).replace(/\\n/g,`
|
|
3
3
|
`).replace(/`/g,"\\`")+"`";return`const response = await fetch("${t.toString()}", {
|
|
4
4
|
\tmethod: "${e.get(`method`)}",${r&&r.size?`
|
|
5
5
|
\theaders: {
|
|
@@ -11,4 +11,4 @@ import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{t}from"./button-V4IQ8F
|
|
|
11
11
|
const data = await response.json();
|
|
12
12
|
console.log(data);
|
|
13
13
|
`}}}],y={generators:{fetch:{title:`Fetch`,syntax:`javascript`}}};function b({entityId:e,instanceClient:t}){return c({queryKey:[e,`OpenAPI`],queryFn:async()=>{let{data:e}=await t.get(`/api/openapi/rest`);return e}})}var x=e(i(),1),S=a(),C=(0,x.lazy)(()=>u(()=>import(`./vendor-react-Dj1rnUQ4.js`).then(e=>e.x),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])));function w(){let{instanceId:e,clusterId:i}=r({strict:!1}),a=l(),{data:o,isLoading:c}=s(m(a)),{data:u,isLoading:w}=s(g(a)),T=h(),{data:E,isLoading:D,error:O}=s(b(a));E?.servers?.length&&(E.servers[0].url=T);let k=o?.http,A=``,j=k?.cors===!1,M=k?.corsAccessList?.length!==void 0&&!k.corsAccessList.includes(`*`)&&!k.corsAccessList.includes(`null`)&&!k.corsAccessList.includes(window.location.origin);j?A=`This ${i&&!e?`cluster`:`instance`} has CORS disabled currently, so you won't be able to execute API requests from the browser.`:M&&(A=`This ${i&&!e?`cluster`:`instance`} has CORS enabled, but ${window.location.origin} is not allowed, so you won't be able to execute API requests from the browser.`);let{onConfigUpdate:N,isPending:P}=f(),F=(0,x.useCallback)(()=>{N({...j?{http_cors:!0}:{},...M?{http_corsAccessList:[...k?.corsAccessList??[],window.location.origin]}:{}})},[j,k?.corsAccessList,M,N]);if(c||w||D)return(0,S.jsx)(p,{centered:!0,text:`Looking up your instance configuration, one moment.`});if(O){let e;return e=u?.version&&!_(`4.7.0-beta.7`,u?.version)?`API Docs are only available starting in version '4.7.0-beta.7' of Harper, please update your version ${u.version}!`:`We weren't able to look up your docs. Please check the Network tab of your developer tools to see why the docs were not accessible to Studio.`,(0,S.jsx)(d,{title:`API Docs Unavailable`,error:{message:e},showReturnToHome:!1})}return(0,S.jsxs)(S.Fragment,{children:[A&&(0,S.jsx)(d,{title:`CORS Disabled: HTTP API Not Accessible`,className:`mt-0 mx-4 m-0 border-yellow text-yellow`,error:{message:A},showReturnToHome:!1,children:(0,S.jsxs)(t,{type:`button`,disabled:P,variant:`warning`,className:`rounded-full`,onClick:F,children:[(0,S.jsx)(n,{}),P?`Enabling CORS...`:`Enable CORS for ${window.location.origin}`]})}),(0,S.jsx)(x.Suspense,{fallback:(0,S.jsx)(p,{centered:!0,text:`Loading API documentation...`}),children:(0,S.jsx)(C,{spec:E,persistAuthorization:!0,withCredentials:!0,requestSnippetsEnabled:!0,defaultModelRendering:`model`,requestSnippets:y,plugins:v,tryItOutEnabled:!0})})]})}var T=o(`/apis`)({component:w});export{T as route};
|
|
14
|
-
//# sourceMappingURL=index.lazy-
|
|
14
|
+
//# sourceMappingURL=index.lazy-DN6bSQzR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../src/features/instance/apis/plugins.ts","../../src/features/instance/apis/requestSnippets.ts","../../src/integrations/api/instance/status/getOpenAPI.ts","../../src/features/instance/apis/APIDocs.tsx","../../src/features/instance/apis/index.lazy.tsx"],"sourcesContent":["export const SnippedGeneratorNodeJsPlugin = {\n\tfn: {\n\t\trequestSnippetGenerator_fetch: (request: { get: (key: string) => unknown }) => {\n\t\t\tconst url = new URL(request.get('url') as string);\n\t\t\tlet isMultipartFormDataRequest = false;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst headers = request.get('headers') as any;\n\t\t\tif (headers && headers.size) {\n\t\t\t\theaders.map((val: string, key: string) => {\n\t\t\t\t\tisMultipartFormDataRequest = isMultipartFormDataRequest\n\t\t\t\t\t\t|| /^content-type$/i.test(key) && /^multipart\\/form-data$/i.test(val);\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet reqBody = request.get('body') as string | object;\n\t\t\tconst reqMethod = request.get('method') as string;\n\t\t\tif (reqBody) {\n\t\t\t\tif (isMultipartFormDataRequest && ['POST', 'PUT', 'PATCH'].includes(reqMethod)) {\n\t\t\t\t\treturn 'throw new Error(\"Currently unsupported content-type: /^multipart\\\\/form-data$/i\");';\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof reqBody !== 'string') {\n\t\t\t\t\t\treqBody = JSON.stringify(reqBody, null, '\\t');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!reqBody && reqMethod === 'POST') {\n\t\t\t\treqBody = '';\n\t\t\t}\n\n\t\t\tconst stringBody = '`' + (reqBody || '')\n\t\t\t\t.replace(/\\\\n/g, '\\n')\n\t\t\t\t.replace(/`/g, '\\\\`')\n\t\t\t\t+ '`';\n\n\t\t\treturn `const response = await fetch(\"${url.toString()}\", {\n\\tmethod: \"${request.get('method')}\",${\n\t\t\t\theaders && headers.size\n\t\t\t\t\t? `\n\\theaders: {\n\\t\\t${headers.map((val: string, key: string) => `\"${key}\": \"${val}\"`).valueSeq().join(',\\n\\t\\t')}\n\\t},`\n\t\t\t\t\t: ''\n\t\t\t}${\n\t\t\t\treqBody\n\t\t\t\t\t? `\n\\tbody: ${stringBody},`\n\t\t\t\t\t: ''\n\t\t\t}\n});\nconst data = await response.json();\nconsole.log(data);\n`;\n\t\t},\n\t},\n};\n\nexport const plugins = [\n\tSnippedGeneratorNodeJsPlugin,\n];\n","export const requestSnippets = {\n\tgenerators: {\n\t\tfetch: {\n\t\t\ttitle: 'Fetch',\n\t\t\tsyntax: 'javascript',\n\t\t},\n\t},\n};\n","import { InstanceClientIdConfig } from '@/config/instanceClientConfig';\nimport { queryOptions } from '@tanstack/react-query';\n\nexport function getOpenAPIQueryOptions({ entityId, instanceClient }: InstanceClientIdConfig) {\n\treturn queryOptions({\n\t\tqueryKey: [entityId, 'OpenAPI'] as const,\n\t\tqueryFn: async () => {\n\t\t\tconst { data } = await instanceClient.get('/api/openapi/rest');\n\t\t\treturn data;\n\t\t},\n\t});\n}\n","import { ErrorComponent } from '@/components/ErrorComponent';\nimport { Loading } from '@/components/Loading';\nimport { Button } from '@/components/ui/button';\nimport { useEntityRestURL } from '@/config/useEntityRestURL';\nimport { useInstanceClientIdParams } from '@/config/useInstanceClient';\nimport { plugins } from '@/features/instance/apis/plugins';\nimport { requestSnippets } from '@/features/instance/apis/requestSnippets';\nimport { useRollingConfigUpdate } from '@/hooks/useRollingConfigUpdate';\nimport { getConfigurationQueryOptions } from '@/integrations/api/instance/status/getConfiguration';\nimport { getOpenAPIQueryOptions } from '@/integrations/api/instance/status/getOpenAPI';\nimport { getRegistrationInfoQueryOptions } from '@/integrations/api/instance/status/getRegistrationInfo';\nimport { wasAReleasedBeforeB } from '@/lib/string/wasAReleasedBeforeB';\nimport { useQuery } from '@tanstack/react-query';\nimport { useParams } from '@tanstack/react-router';\nimport { Plus } from 'lucide-react';\nimport { lazy, Suspense, useCallback } from 'react';\n\nconst SwaggerUI = lazy(() => import('swagger-ui-react'));\nimport 'swagger-ui-react/swagger-ui.css';\nimport './swagger.css';\n\nexport function APIDocs() {\n\tconst { instanceId, clusterId }: { instanceId?: string; clusterId?: string } = useParams({ strict: false });\n\tconst operationsParams = useInstanceClientIdParams();\n\tconst {\n\t\tdata: configurationInfo,\n\t\tisLoading: isLoadingConfiguration,\n\t} = useQuery(getConfigurationQueryOptions(operationsParams));\n\tconst { data: registrationInfo, isLoading: isLoadingRegistration } = useQuery(\n\t\tgetRegistrationInfoQueryOptions(operationsParams),\n\t);\n\tconst baseURL = useEntityRestURL();\n\tconst {\n\t\tdata: spec,\n\t\tisLoading: isLoadingDocs,\n\t\terror,\n\t} = useQuery(getOpenAPIQueryOptions(operationsParams));\n\tif (spec?.servers?.length) {\n\t\tspec.servers[0].url = baseURL;\n\t}\n\tconst http = configurationInfo?.http;\n\n\tlet apiInaccessibleWarning: string = '';\n\n\tconst corsDisabled = http?.cors === false;\n\tconst missingFromCORSList = http?.corsAccessList?.length !== undefined\n\t\t&& !http.corsAccessList.includes('*')\n\t\t&& !http.corsAccessList.includes('null')\n\t\t&& !http.corsAccessList.includes(window.location.origin);\n\tif (corsDisabled) {\n\t\tapiInaccessibleWarning = `This ${\n\t\t\tclusterId && !instanceId ? 'cluster' : 'instance'\n\t\t} has CORS disabled currently, so you won't be able to execute API requests from the browser.`;\n\t} else if (missingFromCORSList) {\n\t\tapiInaccessibleWarning = `This ${\n\t\t\tclusterId && !instanceId ? 'cluster' : 'instance'\n\t\t} has CORS enabled, but ${window.location.origin} is not allowed, so you won't be able to execute API requests from the browser.`;\n\t}\n\n\tconst { onConfigUpdate, isPending: isSettingConfiguration } = useRollingConfigUpdate();\n\tconst enableCORS = useCallback(() => {\n\t\tonConfigUpdate({\n\t\t\t...(corsDisabled\n\t\t\t\t? {\n\t\t\t\t\t'http_cors': true,\n\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(missingFromCORSList\n\t\t\t\t? {\n\t\t\t\t\t'http_corsAccessList': [\n\t\t\t\t\t\t...(http?.corsAccessList ?? []),\n\t\t\t\t\t\twindow.location.origin,\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t\t: {}),\n\t\t});\n\t}, [corsDisabled, http?.corsAccessList, missingFromCORSList, onConfigUpdate]);\n\n\tif (isLoadingConfiguration || isLoadingRegistration || isLoadingDocs) {\n\t\treturn <Loading centered={true} text=\"Looking up your instance configuration, one moment.\" />;\n\t}\n\n\tif (error) {\n\t\tlet message: string;\n\t\tif (registrationInfo?.version && !wasAReleasedBeforeB('4.7.0-beta.7', registrationInfo?.version)) {\n\t\t\tmessage =\n\t\t\t\t`API Docs are only available starting in version '4.7.0-beta.7' of Harper, please update your version ${registrationInfo.version}!`;\n\t\t} else {\n\t\t\tmessage =\n\t\t\t\t`We weren't able to look up your docs. Please check the Network tab of your developer tools to see why the docs were not accessible to Studio.`;\n\t\t}\n\n\t\treturn (\n\t\t\t<ErrorComponent\n\t\t\t\ttitle=\"API Docs Unavailable\"\n\t\t\t\terror={{ message }}\n\t\t\t\tshowReturnToHome={false}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{apiInaccessibleWarning && (\n\t\t\t\t<ErrorComponent\n\t\t\t\t\ttitle=\"CORS Disabled: HTTP API Not Accessible\"\n\t\t\t\t\tclassName=\"mt-0 mx-4 m-0 border-yellow text-yellow\"\n\t\t\t\t\terror={{ message: apiInaccessibleWarning }}\n\t\t\t\t\tshowReturnToHome={false}\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tdisabled={isSettingConfiguration}\n\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\tonClick={enableCORS}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Plus />\n\t\t\t\t\t\t{isSettingConfiguration ? 'Enabling CORS...' : `Enable CORS for ${window.location.origin}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</ErrorComponent>\n\t\t\t)}\n\t\t\t<Suspense fallback={<Loading centered={true} text=\"Loading API documentation...\" />}>\n\t\t\t\t<SwaggerUI\n\t\t\t\t\tspec={spec}\n\t\t\t\t\tpersistAuthorization={true}\n\t\t\t\t\twithCredentials={true}\n\t\t\t\t\trequestSnippetsEnabled={true}\n\t\t\t\t\tdefaultModelRendering=\"model\"\n\t\t\t\t\trequestSnippets={requestSnippets}\n\t\t\t\t\tplugins={plugins}\n\t\t\t\t\ttryItOutEnabled={true}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t</>\n\t);\n}\n","import { APIDocs } from '@/features/instance/apis/APIDocs';\nimport { createLazyRoute } from '@tanstack/react-router';\n\nexport const route = createLazyRoute('/apis')({\n\tcomponent: APIDocs,\n});\n"],"file":"index.lazy-DBjOisCz.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../src/features/instance/apis/plugins.ts","../../src/features/instance/apis/requestSnippets.ts","../../src/integrations/api/instance/status/getOpenAPI.ts","../../src/features/instance/apis/APIDocs.tsx","../../src/features/instance/apis/index.lazy.tsx"],"sourcesContent":["export const SnippedGeneratorNodeJsPlugin = {\n\tfn: {\n\t\trequestSnippetGenerator_fetch: (request: { get: (key: string) => unknown }) => {\n\t\t\tconst url = new URL(request.get('url') as string);\n\t\t\tlet isMultipartFormDataRequest = false;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst headers = request.get('headers') as any;\n\t\t\tif (headers && headers.size) {\n\t\t\t\theaders.map((val: string, key: string) => {\n\t\t\t\t\tisMultipartFormDataRequest = isMultipartFormDataRequest\n\t\t\t\t\t\t|| /^content-type$/i.test(key) && /^multipart\\/form-data$/i.test(val);\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet reqBody = request.get('body') as string | object;\n\t\t\tconst reqMethod = request.get('method') as string;\n\t\t\tif (reqBody) {\n\t\t\t\tif (isMultipartFormDataRequest && ['POST', 'PUT', 'PATCH'].includes(reqMethod)) {\n\t\t\t\t\treturn 'throw new Error(\"Currently unsupported content-type: /^multipart\\\\/form-data$/i\");';\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof reqBody !== 'string') {\n\t\t\t\t\t\treqBody = JSON.stringify(reqBody, null, '\\t');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!reqBody && reqMethod === 'POST') {\n\t\t\t\treqBody = '';\n\t\t\t}\n\n\t\t\tconst stringBody = '`' + (reqBody || '')\n\t\t\t\t.replace(/\\\\n/g, '\\n')\n\t\t\t\t.replace(/`/g, '\\\\`')\n\t\t\t\t+ '`';\n\n\t\t\treturn `const response = await fetch(\"${url.toString()}\", {\n\\tmethod: \"${request.get('method')}\",${\n\t\t\t\theaders && headers.size\n\t\t\t\t\t? `\n\\theaders: {\n\\t\\t${headers.map((val: string, key: string) => `\"${key}\": \"${val}\"`).valueSeq().join(',\\n\\t\\t')}\n\\t},`\n\t\t\t\t\t: ''\n\t\t\t}${\n\t\t\t\treqBody\n\t\t\t\t\t? `\n\\tbody: ${stringBody},`\n\t\t\t\t\t: ''\n\t\t\t}\n});\nconst data = await response.json();\nconsole.log(data);\n`;\n\t\t},\n\t},\n};\n\nexport const plugins = [\n\tSnippedGeneratorNodeJsPlugin,\n];\n","export const requestSnippets = {\n\tgenerators: {\n\t\tfetch: {\n\t\t\ttitle: 'Fetch',\n\t\t\tsyntax: 'javascript',\n\t\t},\n\t},\n};\n","import { InstanceClientIdConfig } from '@/config/instanceClientConfig';\nimport { queryOptions } from '@tanstack/react-query';\n\nexport function getOpenAPIQueryOptions({ entityId, instanceClient }: InstanceClientIdConfig) {\n\treturn queryOptions({\n\t\tqueryKey: [entityId, 'OpenAPI'] as const,\n\t\tqueryFn: async () => {\n\t\t\tconst { data } = await instanceClient.get('/api/openapi/rest');\n\t\t\treturn data;\n\t\t},\n\t});\n}\n","import { ErrorComponent } from '@/components/ErrorComponent';\nimport { Loading } from '@/components/Loading';\nimport { Button } from '@/components/ui/button';\nimport { useEntityRestURL } from '@/config/useEntityRestURL';\nimport { useInstanceClientIdParams } from '@/config/useInstanceClient';\nimport { plugins } from '@/features/instance/apis/plugins';\nimport { requestSnippets } from '@/features/instance/apis/requestSnippets';\nimport { useRollingConfigUpdate } from '@/hooks/useRollingConfigUpdate';\nimport { getConfigurationQueryOptions } from '@/integrations/api/instance/status/getConfiguration';\nimport { getOpenAPIQueryOptions } from '@/integrations/api/instance/status/getOpenAPI';\nimport { getRegistrationInfoQueryOptions } from '@/integrations/api/instance/status/getRegistrationInfo';\nimport { wasAReleasedBeforeB } from '@/lib/string/wasAReleasedBeforeB';\nimport { useQuery } from '@tanstack/react-query';\nimport { useParams } from '@tanstack/react-router';\nimport { Plus } from 'lucide-react';\nimport { lazy, Suspense, useCallback } from 'react';\n\nconst SwaggerUI = lazy(() => import('swagger-ui-react'));\nimport 'swagger-ui-react/swagger-ui.css';\nimport './swagger.css';\n\nexport function APIDocs() {\n\tconst { instanceId, clusterId }: { instanceId?: string; clusterId?: string } = useParams({ strict: false });\n\tconst operationsParams = useInstanceClientIdParams();\n\tconst {\n\t\tdata: configurationInfo,\n\t\tisLoading: isLoadingConfiguration,\n\t} = useQuery(getConfigurationQueryOptions(operationsParams));\n\tconst { data: registrationInfo, isLoading: isLoadingRegistration } = useQuery(\n\t\tgetRegistrationInfoQueryOptions(operationsParams),\n\t);\n\tconst baseURL = useEntityRestURL();\n\tconst {\n\t\tdata: spec,\n\t\tisLoading: isLoadingDocs,\n\t\terror,\n\t} = useQuery(getOpenAPIQueryOptions(operationsParams));\n\tif (spec?.servers?.length) {\n\t\tspec.servers[0].url = baseURL;\n\t}\n\tconst http = configurationInfo?.http;\n\n\tlet apiInaccessibleWarning: string = '';\n\n\tconst corsDisabled = http?.cors === false;\n\tconst missingFromCORSList = http?.corsAccessList?.length !== undefined\n\t\t&& !http.corsAccessList.includes('*')\n\t\t&& !http.corsAccessList.includes('null')\n\t\t&& !http.corsAccessList.includes(window.location.origin);\n\tif (corsDisabled) {\n\t\tapiInaccessibleWarning = `This ${\n\t\t\tclusterId && !instanceId ? 'cluster' : 'instance'\n\t\t} has CORS disabled currently, so you won't be able to execute API requests from the browser.`;\n\t} else if (missingFromCORSList) {\n\t\tapiInaccessibleWarning = `This ${\n\t\t\tclusterId && !instanceId ? 'cluster' : 'instance'\n\t\t} has CORS enabled, but ${window.location.origin} is not allowed, so you won't be able to execute API requests from the browser.`;\n\t}\n\n\tconst { onConfigUpdate, isPending: isSettingConfiguration } = useRollingConfigUpdate();\n\tconst enableCORS = useCallback(() => {\n\t\tonConfigUpdate({\n\t\t\t...(corsDisabled\n\t\t\t\t? {\n\t\t\t\t\t'http_cors': true,\n\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(missingFromCORSList\n\t\t\t\t? {\n\t\t\t\t\t'http_corsAccessList': [\n\t\t\t\t\t\t...(http?.corsAccessList ?? []),\n\t\t\t\t\t\twindow.location.origin,\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t\t: {}),\n\t\t});\n\t}, [corsDisabled, http?.corsAccessList, missingFromCORSList, onConfigUpdate]);\n\n\tif (isLoadingConfiguration || isLoadingRegistration || isLoadingDocs) {\n\t\treturn <Loading centered={true} text=\"Looking up your instance configuration, one moment.\" />;\n\t}\n\n\tif (error) {\n\t\tlet message: string;\n\t\tif (registrationInfo?.version && !wasAReleasedBeforeB('4.7.0-beta.7', registrationInfo?.version)) {\n\t\t\tmessage =\n\t\t\t\t`API Docs are only available starting in version '4.7.0-beta.7' of Harper, please update your version ${registrationInfo.version}!`;\n\t\t} else {\n\t\t\tmessage =\n\t\t\t\t`We weren't able to look up your docs. Please check the Network tab of your developer tools to see why the docs were not accessible to Studio.`;\n\t\t}\n\n\t\treturn (\n\t\t\t<ErrorComponent\n\t\t\t\ttitle=\"API Docs Unavailable\"\n\t\t\t\terror={{ message }}\n\t\t\t\tshowReturnToHome={false}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{apiInaccessibleWarning && (\n\t\t\t\t<ErrorComponent\n\t\t\t\t\ttitle=\"CORS Disabled: HTTP API Not Accessible\"\n\t\t\t\t\tclassName=\"mt-0 mx-4 m-0 border-yellow text-yellow\"\n\t\t\t\t\terror={{ message: apiInaccessibleWarning }}\n\t\t\t\t\tshowReturnToHome={false}\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tdisabled={isSettingConfiguration}\n\t\t\t\t\t\tvariant=\"warning\"\n\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\tonClick={enableCORS}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Plus />\n\t\t\t\t\t\t{isSettingConfiguration ? 'Enabling CORS...' : `Enable CORS for ${window.location.origin}`}\n\t\t\t\t\t</Button>\n\t\t\t\t</ErrorComponent>\n\t\t\t)}\n\t\t\t<Suspense fallback={<Loading centered={true} text=\"Loading API documentation...\" />}>\n\t\t\t\t<SwaggerUI\n\t\t\t\t\tspec={spec}\n\t\t\t\t\tpersistAuthorization={true}\n\t\t\t\t\twithCredentials={true}\n\t\t\t\t\trequestSnippetsEnabled={true}\n\t\t\t\t\tdefaultModelRendering=\"model\"\n\t\t\t\t\trequestSnippets={requestSnippets}\n\t\t\t\t\tplugins={plugins}\n\t\t\t\t\ttryItOutEnabled={true}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t</>\n\t);\n}\n","import { APIDocs } from '@/features/instance/apis/APIDocs';\nimport { createLazyRoute } from '@tanstack/react-router';\n\nexport const route = createLazyRoute('/apis')({\n\tcomponent: APIDocs,\n});\n"],"file":"index.lazy-DN6bSQzR.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{h as t,i as n,r,t as i}from"./button-V4IQ8FFq.js";import{Nt as a,jt as o}from"./vendor-core-f32UXcS5.js";import{Fa as s,Oa as c,Pa as l,Pr as u,Qn as d,Ta as f,hr as p,qn as m,xa as h}from"./vendor-react-Dj1rnUQ4.js";import{n as g}from"./useAuth-DqzxNJHV.js";import{A as _,D as v,E as y,I as b,M as x,O as S,j as C,k as w}from"./index-
|
|
2
|
-
//# sourceMappingURL=profile-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-BYbx6iT9.js";import{h as t,i as n,r,t as i}from"./button-V4IQ8FFq.js";import{Nt as a,jt as o}from"./vendor-core-f32UXcS5.js";import{Fa as s,Oa as c,Pa as l,Pr as u,Qn as d,Ta as f,hr as p,qn as m,xa as h}from"./vendor-react-Dj1rnUQ4.js";import{n as g}from"./useAuth-DqzxNJHV.js";import{A as _,D as v,E as y,I as b,M as x,O as S,j as C,k as w}from"./index-BIjBsaWw.js";async function T(e){let{id:n,newPassword:r,confirmNewPassword:i,...a}=e,o={...a};r&&r===i&&(o.password=r);let{data:s}=await t.patch(`/User/${n}`,o);return s}function E(){return c({mutationFn:e=>T(e)})}var D=o({id:a(),firstname:a({error:`Please enter your first name.`}).min(2,{error:`First name is required.`}).max(50,{error:`First name must be less than 50 characters.`}),lastname:a({error:`Please enter your last name.`}).min(2,{error:`Last name is required.`}).max(50,{error:`Last name must be less than 50 characters.`}),newPassword:a({error:`Please enter your new password.`}).min(8,{error:`Password must be 8 characters or more.`}).or(a().max(0)),confirmNewPassword:a().optional()}).refine(e=>e.newPassword===e.confirmNewPassword,{error:`Passwords do not match`,path:[`confirmNewPassword`]}),O=e(s(),1),k=l();function A(){let e=f(),t=h(),{user:a}=g(),o=d({resolver:m(D),defaultValues:{confirmNewPassword:``,firstname:a?.firstname||``,id:a?.id||``,lastname:a?.lastname||``,newPassword:``}}),{control:s,handleSubmit:c,reset:l,formState:{defaultValues:T,isDirty:A,isValid:j}}=o,{mutate:M,isPending:N}=E(),P=(0,O.useCallback)(async i=>{i&&M(i,{onSuccess:a=>{l({...T,...a}),n.updateUserForEntity(r,a),i.newPassword?(p.success(`Profile updated successfully!`,{description:`Please sign in with your new password.`}),b(),t({to:`/sign-in`}),e.invalidate()):p.success(`Profile updated successfully!`)}})},[T,t,l,e,M]);return(0,k.jsxs)(`div`,{className:`mt-20 px-4 pt-4 md:px-12 max-w-2xl`,children:[(0,k.jsx)(`h2`,{className:`text-2xl font-light`,children:`Profile`}),(0,k.jsx)(x,{...o,children:(0,k.jsxs)(`form`,{id:`profile-edit-form`,name:`profile-edit-form`,onSubmit:c(P),className:`grid gap-4 my-4`,children:[(0,k.jsx)(_,{control:s,name:`firstname`,render:({field:e})=>(0,k.jsxs)(w,{children:[(0,k.jsx)(S,{className:`pb-1`,children:`First Name`}),(0,k.jsx)(C,{children:(0,k.jsx)(y,{type:`text`,className:`bg-purple-400 border-purple-400 dark:bg-black dark:border-black`,autoCapitalize:`words`,autoFocus:!0,...e})}),(0,k.jsx)(v,{})]})}),(0,k.jsx)(_,{control:s,name:`lastname`,render:({field:e})=>(0,k.jsxs)(w,{children:[(0,k.jsx)(S,{className:`pb-1`,children:`Last Name`}),(0,k.jsx)(C,{children:(0,k.jsx)(y,{type:`text`,className:`bg-purple-400 border-purple-400 dark:bg-black dark:border-black`,autoCapitalize:`words`,...e})}),(0,k.jsx)(v,{})]})}),(0,k.jsx)(S,{className:`pb-1`,children:`Email`}),(0,k.jsx)(C,{children:(0,k.jsx)(y,{type:`email`,enterKeyHint:`next`,autoComplete:`email`,autoCapitalize:`none`,value:a?.email||``,disabled:!0,readOnly:!0})}),(0,k.jsx)(_,{control:s,name:`newPassword`,render:({field:e})=>(0,k.jsxs)(w,{children:[(0,k.jsx)(S,{className:`pb-1`,children:`New Password`}),(0,k.jsx)(C,{children:(0,k.jsx)(y,{type:`password`,placeholder:`Optional`,className:`bg-purple-400 border-purple-400 dark:bg-black dark:border-black`,autoComplete:`new-password`,autoCapitalize:`none`,...e})}),(0,k.jsx)(v,{})]})}),(0,k.jsx)(_,{control:s,name:`confirmNewPassword`,render:({field:e})=>(0,k.jsxs)(w,{children:[(0,k.jsx)(S,{className:`pb-1`,children:`Confirm New Password`}),(0,k.jsx)(C,{children:(0,k.jsx)(y,{type:`password`,className:`bg-purple-400 border-purple-400 dark:bg-black dark:border-black`,autoComplete:`new-password`,autoCapitalize:`none`,...e})}),(0,k.jsx)(v,{})]})}),(0,k.jsx)(`div`,{className:`flex justify-between w-full`,children:(0,k.jsxs)(i,{type:`submit`,variant:`submit`,className:`rounded-full`,disabled:N||!A||!j,children:[(0,k.jsx)(u,{}),` Update Profile`]})})]})})]})}export{A as ProfileIndex};
|
|
2
|
+
//# sourceMappingURL=profile-Dyrp-ZIJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-DSL-499E.js","names":[],"sources":["../../src/features/profile/mutations/updateUserMutation.ts","../../src/features/profile/mutations/updateUserSchema.ts","../../src/features/profile/index.tsx"],"sourcesContent":["import { apiClient } from '@/config/apiClient';\nimport { UpdateUserSchema } from '@/features/profile/mutations/updateUserSchema';\nimport { SchemaUser } from '@/integrations/api/api.gen';\nimport { User } from '@/integrations/api/api.patch';\nimport { useMutation } from '@tanstack/react-query';\nimport z from 'zod';\n\nasync function onUpdateUser(formData: z.infer<typeof UpdateUserSchema>) {\n\tconst { id, newPassword, confirmNewPassword, ...otherFields } = formData;\n\tconst userData: Partial<SchemaUser & { password: string }> = {\n\t\t...otherFields,\n\t};\n\tif (newPassword && newPassword === confirmNewPassword) {\n\t\tuserData.password = newPassword;\n\t}\n\tconst { data } = await apiClient.patch(`/User/${id}` as '/User/{id}', userData);\n\treturn data as Partial<User>;\n}\n\nexport function useUpdateUserMutation() {\n\treturn useMutation({\n\t\tmutationFn: (formData: z.infer<typeof UpdateUserSchema>) => onUpdateUser(formData),\n\t});\n}\n","import { z } from 'zod';\n\nexport const UpdateUserSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tfirstname: z\n\t\t\t.string({\n\t\t\t\terror: 'Please enter your first name.',\n\t\t\t})\n\t\t\t.min(2, { error: 'First name is required.' })\n\t\t\t.max(50, { error: 'First name must be less than 50 characters.' }),\n\t\tlastname: z\n\t\t\t.string({\n\t\t\t\terror: 'Please enter your last name.',\n\t\t\t})\n\t\t\t.min(2, { error: 'Last name is required.' })\n\t\t\t.max(50, { error: 'Last name must be less than 50 characters.' }),\n\t\tnewPassword: z\n\t\t\t.string({\n\t\t\t\terror: 'Please enter your new password.',\n\t\t\t})\n\t\t\t.min(8, { error: 'Password must be 8 characters or more.' })\n\t\t\t.or(z.string().max(0)),\n\t\tconfirmNewPassword: z\n\t\t\t.string()\n\t\t\t.optional(),\n\t})\n\t.refine((data) => data.newPassword === data.confirmNewPassword, {\n\t\terror: 'Passwords do not match',\n\t\tpath: ['confirmNewPassword'],\n\t});\n","import { Button } from '@/components/ui/button';\nimport { Form } from '@/components/ui/form/Form';\nimport { FormControl } from '@/components/ui/form/FormControl';\nimport { FormField } from '@/components/ui/form/FormField';\nimport { FormItem } from '@/components/ui/form/FormItem';\nimport { FormLabel } from '@/components/ui/form/FormLabel';\nimport { FormMessage } from '@/components/ui/form/FormMessage';\nimport { Input } from '@/components/ui/input';\nimport { logoutOnSuccess } from '@/features/auth/handlers/logoutOnSuccess';\nimport { authStore, OverallAppSignIn } from '@/features/auth/store/authStore';\nimport { useUpdateUserMutation } from '@/features/profile/mutations/updateUserMutation';\nimport { UpdateUserSchema } from '@/features/profile/mutations/updateUserSchema';\nimport { useCloudAuth } from '@/hooks/useAuth';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate, useRouter } from '@tanstack/react-router';\nimport { Save } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nexport function ProfileIndex() {\n\tconst router = useRouter();\n\tconst navigate = useNavigate();\n\tconst { user } = useCloudAuth();\n\n\tconst methods = useForm({\n\t\tresolver: zodResolver(UpdateUserSchema),\n\t\tdefaultValues: {\n\t\t\tconfirmNewPassword: '',\n\t\t\tfirstname: user?.firstname || '',\n\t\t\tid: user?.id || '',\n\t\t\tlastname: user?.lastname || '',\n\t\t\tnewPassword: '',\n\t\t},\n\t});\n\tconst { control, handleSubmit, reset, formState: { defaultValues, isDirty, isValid } } = methods;\n\tconst { mutate: updateUser, isPending: isUpdatePending } = useUpdateUserMutation();\n\n\tconst onSubmitClick = useCallback(\n\t\tasync (formData: z.infer<typeof UpdateUserSchema>) => {\n\t\t\tif (formData) {\n\t\t\t\tupdateUser(formData, {\n\t\t\t\t\tonSuccess: (data) => {\n\t\t\t\t\t\treset({\n\t\t\t\t\t\t\t...defaultValues,\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tauthStore.updateUserForEntity(OverallAppSignIn, data);\n\t\t\t\t\t\tif (formData.newPassword) {\n\t\t\t\t\t\t\ttoast.success('Profile updated successfully!', {\n\t\t\t\t\t\t\t\tdescription: 'Please sign in with your new password.',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tlogoutOnSuccess();\n\t\t\t\t\t\t\tvoid navigate({ to: '/sign-in' });\n\t\t\t\t\t\t\tvoid router.invalidate();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoast.success('Profile updated successfully!');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[defaultValues, navigate, reset, router, updateUser],\n\t);\n\n\treturn (\n\t\t<div className=\"mt-20 px-4 pt-4 md:px-12 max-w-2xl\">\n\t\t\t<h2 className=\"text-2xl font-light\">Profile</h2>\n\t\t\t<Form {...methods}>\n\t\t\t\t<form\n\t\t\t\t\tid=\"profile-edit-form\"\n\t\t\t\t\tname=\"profile-edit-form\"\n\t\t\t\t\tonSubmit={handleSubmit(onSubmitClick)}\n\t\t\t\t\tclassName=\"grid gap-4 my-4\"\n\t\t\t\t>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"firstname\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">First Name</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"words\"\n\t\t\t\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"lastname\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">Last Name</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"words\"\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<FormLabel className=\"pb-1\">Email</FormLabel>\n\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t\t\tenterKeyHint=\"next\"\n\t\t\t\t\t\t\tautoComplete=\"email\"\n\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\tvalue={user?.email || ''}\n\t\t\t\t\t\t\tdisabled={true}\n\t\t\t\t\t\t\treadOnly={true}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormControl>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"newPassword\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">New Password</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"Optional\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"new-password\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"confirmNewPassword\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">Confirm New Password</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"new-password\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<div className=\"flex justify-between w-full\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\tvariant=\"submit\"\n\t\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\t\tdisabled={isUpdatePending || !isDirty || !isValid}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Save /> Update Profile\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</Form>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profile-Dyrp-ZIJ.js","names":[],"sources":["../../src/features/profile/mutations/updateUserMutation.ts","../../src/features/profile/mutations/updateUserSchema.ts","../../src/features/profile/index.tsx"],"sourcesContent":["import { apiClient } from '@/config/apiClient';\nimport { UpdateUserSchema } from '@/features/profile/mutations/updateUserSchema';\nimport { SchemaUser } from '@/integrations/api/api.gen';\nimport { User } from '@/integrations/api/api.patch';\nimport { useMutation } from '@tanstack/react-query';\nimport z from 'zod';\n\nasync function onUpdateUser(formData: z.infer<typeof UpdateUserSchema>) {\n\tconst { id, newPassword, confirmNewPassword, ...otherFields } = formData;\n\tconst userData: Partial<SchemaUser & { password: string }> = {\n\t\t...otherFields,\n\t};\n\tif (newPassword && newPassword === confirmNewPassword) {\n\t\tuserData.password = newPassword;\n\t}\n\tconst { data } = await apiClient.patch(`/User/${id}` as '/User/{id}', userData);\n\treturn data as Partial<User>;\n}\n\nexport function useUpdateUserMutation() {\n\treturn useMutation({\n\t\tmutationFn: (formData: z.infer<typeof UpdateUserSchema>) => onUpdateUser(formData),\n\t});\n}\n","import { z } from 'zod';\n\nexport const UpdateUserSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tfirstname: z\n\t\t\t.string({\n\t\t\t\terror: 'Please enter your first name.',\n\t\t\t})\n\t\t\t.min(2, { error: 'First name is required.' })\n\t\t\t.max(50, { error: 'First name must be less than 50 characters.' }),\n\t\tlastname: z\n\t\t\t.string({\n\t\t\t\terror: 'Please enter your last name.',\n\t\t\t})\n\t\t\t.min(2, { error: 'Last name is required.' })\n\t\t\t.max(50, { error: 'Last name must be less than 50 characters.' }),\n\t\tnewPassword: z\n\t\t\t.string({\n\t\t\t\terror: 'Please enter your new password.',\n\t\t\t})\n\t\t\t.min(8, { error: 'Password must be 8 characters or more.' })\n\t\t\t.or(z.string().max(0)),\n\t\tconfirmNewPassword: z\n\t\t\t.string()\n\t\t\t.optional(),\n\t})\n\t.refine((data) => data.newPassword === data.confirmNewPassword, {\n\t\terror: 'Passwords do not match',\n\t\tpath: ['confirmNewPassword'],\n\t});\n","import { Button } from '@/components/ui/button';\nimport { Form } from '@/components/ui/form/Form';\nimport { FormControl } from '@/components/ui/form/FormControl';\nimport { FormField } from '@/components/ui/form/FormField';\nimport { FormItem } from '@/components/ui/form/FormItem';\nimport { FormLabel } from '@/components/ui/form/FormLabel';\nimport { FormMessage } from '@/components/ui/form/FormMessage';\nimport { Input } from '@/components/ui/input';\nimport { logoutOnSuccess } from '@/features/auth/handlers/logoutOnSuccess';\nimport { authStore, OverallAppSignIn } from '@/features/auth/store/authStore';\nimport { useUpdateUserMutation } from '@/features/profile/mutations/updateUserMutation';\nimport { UpdateUserSchema } from '@/features/profile/mutations/updateUserSchema';\nimport { useCloudAuth } from '@/hooks/useAuth';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate, useRouter } from '@tanstack/react-router';\nimport { Save } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\n\nexport function ProfileIndex() {\n\tconst router = useRouter();\n\tconst navigate = useNavigate();\n\tconst { user } = useCloudAuth();\n\n\tconst methods = useForm({\n\t\tresolver: zodResolver(UpdateUserSchema),\n\t\tdefaultValues: {\n\t\t\tconfirmNewPassword: '',\n\t\t\tfirstname: user?.firstname || '',\n\t\t\tid: user?.id || '',\n\t\t\tlastname: user?.lastname || '',\n\t\t\tnewPassword: '',\n\t\t},\n\t});\n\tconst { control, handleSubmit, reset, formState: { defaultValues, isDirty, isValid } } = methods;\n\tconst { mutate: updateUser, isPending: isUpdatePending } = useUpdateUserMutation();\n\n\tconst onSubmitClick = useCallback(\n\t\tasync (formData: z.infer<typeof UpdateUserSchema>) => {\n\t\t\tif (formData) {\n\t\t\t\tupdateUser(formData, {\n\t\t\t\t\tonSuccess: (data) => {\n\t\t\t\t\t\treset({\n\t\t\t\t\t\t\t...defaultValues,\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tauthStore.updateUserForEntity(OverallAppSignIn, data);\n\t\t\t\t\t\tif (formData.newPassword) {\n\t\t\t\t\t\t\ttoast.success('Profile updated successfully!', {\n\t\t\t\t\t\t\t\tdescription: 'Please sign in with your new password.',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tlogoutOnSuccess();\n\t\t\t\t\t\t\tvoid navigate({ to: '/sign-in' });\n\t\t\t\t\t\t\tvoid router.invalidate();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoast.success('Profile updated successfully!');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[defaultValues, navigate, reset, router, updateUser],\n\t);\n\n\treturn (\n\t\t<div className=\"mt-20 px-4 pt-4 md:px-12 max-w-2xl\">\n\t\t\t<h2 className=\"text-2xl font-light\">Profile</h2>\n\t\t\t<Form {...methods}>\n\t\t\t\t<form\n\t\t\t\t\tid=\"profile-edit-form\"\n\t\t\t\t\tname=\"profile-edit-form\"\n\t\t\t\t\tonSubmit={handleSubmit(onSubmitClick)}\n\t\t\t\t\tclassName=\"grid gap-4 my-4\"\n\t\t\t\t>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"firstname\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">First Name</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"words\"\n\t\t\t\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"lastname\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">Last Name</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"words\"\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<FormLabel className=\"pb-1\">Email</FormLabel>\n\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t\t\tenterKeyHint=\"next\"\n\t\t\t\t\t\t\tautoComplete=\"email\"\n\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\tvalue={user?.email || ''}\n\t\t\t\t\t\t\tdisabled={true}\n\t\t\t\t\t\t\treadOnly={true}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormControl>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"newPassword\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">New Password</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"Optional\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"new-password\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"confirmNewPassword\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel className=\"pb-1\">Confirm New Password</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-purple-400 border-purple-400 dark:bg-black dark:border-black\"\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"new-password\"\n\t\t\t\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<div className=\"flex justify-between w-full\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\tvariant=\"submit\"\n\t\t\t\t\t\t\tclassName=\"rounded-full\"\n\t\t\t\t\t\t\tdisabled={isUpdatePending || !isDirty || !isValid}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Save /> Update Profile\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</Form>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|