@recruitnepal/shared-packages 1.5.0 → 1.7.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/components/common/NoData.d.ts +8 -0
- package/dist/components/common/NoData.d.ts.map +1 -0
- package/dist/components/common/NoData.js +4 -0
- package/dist/components/cv/TemplatePicker.d.ts +14 -0
- package/dist/components/cv/TemplatePicker.d.ts.map +1 -0
- package/dist/components/cv/TemplatePicker.js +161 -0
- package/dist/components/cv/TemplateRenderer.d.ts +20 -0
- package/dist/components/cv/TemplateRenderer.d.ts.map +1 -0
- package/dist/components/cv/TemplateRenderer.js +14 -0
- package/dist/components/ui/BulletListTextarea.d.ts +19 -0
- package/dist/components/ui/BulletListTextarea.d.ts.map +1 -0
- package/dist/components/ui/BulletListTextarea.js +60 -0
- package/dist/components/ui/DesignationSelect.d.ts +13 -0
- package/dist/components/ui/DesignationSelect.d.ts.map +1 -0
- package/dist/components/ui/DesignationSelect.js +78 -0
- package/dist/components/ui/IndustrySelect.d.ts +13 -0
- package/dist/components/ui/IndustrySelect.d.ts.map +1 -0
- package/dist/components/ui/IndustrySelect.js +78 -0
- package/dist/components/ui/MultiSelectOptions.d.ts +18 -0
- package/dist/components/ui/MultiSelectOptions.d.ts.map +1 -0
- package/dist/components/ui/MultiSelectOptions.js +85 -0
- package/dist/components/ui/RatingStars.d.ts +10 -0
- package/dist/components/ui/RatingStars.d.ts.map +1 -0
- package/dist/components/ui/RatingStars.js +10 -0
- package/dist/components/ui/command.d.ts +68 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +24 -0
- package/dist/components/ui/popover.d.ts +7 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +10 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +9 -0
- package/dist/hooks/useDesignations.d.ts +51 -0
- package/dist/hooks/useDesignations.d.ts.map +1 -0
- package/dist/hooks/useDesignations.js +117 -0
- package/dist/hooks/useIndustries.d.ts +51 -0
- package/dist/hooks/useIndustries.d.ts.map +1 -0
- package/dist/hooks/useIndustries.js +118 -0
- package/dist/hooks/useSkills.d.ts +19 -0
- package/dist/hooks/useSkills.d.ts.map +1 -0
- package/dist/hooks/useSkills.js +39 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -0
- package/dist/stores/cvDrafts.store.d.ts +44 -0
- package/dist/stores/cvDrafts.store.d.ts.map +1 -0
- package/dist/stores/cvDrafts.store.js +86 -0
- package/dist/stores/cvLayout.store.d.ts +24 -0
- package/dist/stores/cvLayout.store.d.ts.map +1 -0
- package/dist/stores/cvLayout.store.js +116 -0
- package/dist/stores/cvPreview.store.d.ts +29 -0
- package/dist/stores/cvPreview.store.d.ts.map +1 -0
- package/dist/stores/cvPreview.store.js +80 -0
- package/dist/types/cv-blocks.types.d.ts +44 -0
- package/dist/types/cv-blocks.types.d.ts.map +1 -0
- package/dist/types/cv-blocks.types.js +1 -0
- package/dist/types/cv-draft.types.d.ts +32 -0
- package/dist/types/cv-draft.types.d.ts.map +1 -0
- package/dist/types/cv-draft.types.js +1 -0
- package/dist/types/template.types.d.ts +122 -0
- package/dist/types/template.types.d.ts.map +1 -0
- package/dist/types/template.types.js +1 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +3 -0
- package/dist/utils/commonDropdownOptions.d.ts +6 -0
- package/dist/utils/commonDropdownOptions.d.ts.map +1 -0
- package/dist/utils/commonDropdownOptions.js +15 -0
- package/dist/utils/cv/pdf/printReset.d.ts +3 -0
- package/dist/utils/cv/pdf/printReset.d.ts.map +1 -0
- package/dist/utils/cv/pdf/printReset.js +41 -0
- package/dist/utils/cv/pdf/styles/base.d.ts +2 -0
- package/dist/utils/cv/pdf/styles/base.d.ts.map +1 -0
- package/dist/utils/cv/pdf/styles/base.js +44 -0
- package/dist/utils/cv/pdf/styles/preprocessCssClient.d.ts +3 -0
- package/dist/utils/cv/pdf/styles/preprocessCssClient.d.ts.map +1 -0
- package/dist/utils/cv/pdf/styles/preprocessCssClient.js +33 -0
- package/dist/utils/cv-block-converter.d.ts +11 -0
- package/dist/utils/cv-block-converter.d.ts.map +1 -0
- package/dist/utils/cv-block-converter.js +83 -0
- package/dist/utils/generateSearchQuery.d.ts +2 -0
- package/dist/utils/generateSearchQuery.d.ts.map +1 -0
- package/dist/utils/generateSearchQuery.js +5 -0
- package/package.json +51 -44
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useInfiniteQuery } from '@tanstack/react-query';
|
|
3
|
+
import { apiRequest } from '../utils/api-request';
|
|
4
|
+
import { generateSearchQuery } from '../utils/generateSearchQuery';
|
|
5
|
+
export const useSkills = ({ limit = 50, batchSize = 1, queryObject = {}, token, } = {}) => {
|
|
6
|
+
const skillsQuery = useInfiniteQuery({
|
|
7
|
+
queryKey: ['skills', limit, batchSize, queryObject],
|
|
8
|
+
initialPageParam: 1,
|
|
9
|
+
enabled: true,
|
|
10
|
+
queryFn: async ({ pageParam = 1 }) => {
|
|
11
|
+
const pagesToFetch = Array.from({ length: batchSize }, (_, i) => pageParam + i);
|
|
12
|
+
const results = await Promise.all(pagesToFetch.map(async (page) => {
|
|
13
|
+
const searchQuery = generateSearchQuery({ ...queryObject, page, limit });
|
|
14
|
+
const res = await apiRequest({
|
|
15
|
+
endpoint: `/skills?${searchQuery}`,
|
|
16
|
+
method: 'GET',
|
|
17
|
+
token: token ?? undefined,
|
|
18
|
+
});
|
|
19
|
+
if (!res.success) {
|
|
20
|
+
const msg = (res.errors?.general?.[0]) || (res.errors && Object.values(res.errors)[0]?.[0]) || 'Failed to fetch skills';
|
|
21
|
+
throw new Error(String(msg));
|
|
22
|
+
}
|
|
23
|
+
const payload = res.data;
|
|
24
|
+
return {
|
|
25
|
+
data: payload.data ?? [],
|
|
26
|
+
page,
|
|
27
|
+
pages: payload.pagination?.pages ?? 1,
|
|
28
|
+
nextPage: payload.pagination?.nextPage ?? null,
|
|
29
|
+
};
|
|
30
|
+
}));
|
|
31
|
+
const merged = results.flatMap((r) => r.data);
|
|
32
|
+
const last = results[results.length - 1];
|
|
33
|
+
const nextPage = last.nextPage != null && last.page < last.pages ? last.nextPage : null;
|
|
34
|
+
return { data: merged, nextPage, totalPages: last.pages };
|
|
35
|
+
},
|
|
36
|
+
getNextPageParam: (lastPage) => lastPage.nextPage ?? undefined,
|
|
37
|
+
});
|
|
38
|
+
return { skillsQuery };
|
|
39
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export { WORKSTATUS, WORK_STATUS_VALUES, } from './types/easy-apply';
|
|
|
7
7
|
export type { WorkStatusValue, QuestionsAPIRes, ScreeningAnswersApiResNew, } from './types/easy-apply';
|
|
8
8
|
export { apiRequest } from './utils/api-request';
|
|
9
9
|
export type { ApiResponse } from './utils/api-request';
|
|
10
|
+
export { generateSearchQuery } from './utils/generateSearchQuery';
|
|
11
|
+
export { monthsDropdown, yearsDropdown } from './utils/commonDropdownOptions';
|
|
12
|
+
export { cn } from './utils/cn';
|
|
10
13
|
export { useGetAllVacancy } from './hooks/useGetAllVacancy';
|
|
11
14
|
export { default as useGetAllVacancyDefault } from './hooks/useGetAllVacancy';
|
|
12
15
|
export { useSavedVacancyMutations } from './hooks/useSavedVacancyMutations';
|
|
@@ -19,8 +22,39 @@ export { useEasyApplyMutations } from './hooks/useEasyApplyMutations';
|
|
|
19
22
|
export type { UseEasyApplyMutationsParams } from './hooks/useEasyApplyMutations';
|
|
20
23
|
export { useEasyApplyFormHook, easyApplyUserSchema, screeningAnswerSchema, screeningAnswersSchema, } from './hooks/useEasyApplyFormHook';
|
|
21
24
|
export type { EasyApplyFormValues, EasyApplyScreeningAnswer, EasyApplyScreeningAnswers, UseEasyApplyFormHookParams, } from './hooks/useEasyApplyFormHook';
|
|
25
|
+
export { useDebounce } from './hooks/useDebounce';
|
|
26
|
+
export { useSkills } from './hooks/useSkills';
|
|
27
|
+
export type { Skill, UseSkillsParams } from './hooks/useSkills';
|
|
28
|
+
export { useIndustries } from './hooks/useIndustries';
|
|
29
|
+
export type { Industry, IndustryPayload, UseIndustriesParams } from './hooks/useIndustries';
|
|
30
|
+
export { useDesignations } from './hooks/useDesignations';
|
|
31
|
+
export type { Designation, DesignationPayload, UseDesignationsParams } from './hooks/useDesignations';
|
|
22
32
|
export { default as JobsClient } from './components/JobsClient';
|
|
23
33
|
export type { JobsClientProps } from './components/JobsClient';
|
|
24
34
|
export { default as JobDescriptionClient } from './components/JobDescriptionClient';
|
|
25
35
|
export type { JobDescriptionClientProps } from './components/JobDescriptionClient';
|
|
36
|
+
export type { TemplateData, TemplatePersonalInfo, TemplateSections, TemplateExperience, TemplateEducation, TemplateProject, TemplateSkill, TemplateSkillCategory, TemplateCertification, TemplateLanguage, TemplateReference, TemplateTraining, TemplateLink, TemplateProps, } from './types/template.types';
|
|
37
|
+
export type { CvBlock, CvBlockType, CvBlockStyle, CvLayout, } from './types/cv-blocks.types';
|
|
38
|
+
export type { CvDraft, CreateCvDraftPayload, UpdateCvDraftPayload, CvDraftListResponse, } from './types/cv-draft.types';
|
|
39
|
+
export { convertTemplateToBlocks, getDefaultColumns, getDefaultStyles, } from './utils/cv-block-converter';
|
|
40
|
+
export { preprocessTemplateCssClient, clearCssCacheClient, } from './utils/cv/pdf/styles/preprocessCssClient';
|
|
41
|
+
export { useCvPreview } from './stores/cvPreview.store';
|
|
42
|
+
export { useCvLayout } from './stores/cvLayout.store';
|
|
43
|
+
export { useCvDraftsStore } from './stores/cvDrafts.store';
|
|
44
|
+
export { default as TemplateRenderer } from './components/cv/TemplateRenderer';
|
|
45
|
+
export type { CvTemplateRegistry, TemplateRendererProps } from './components/cv/TemplateRenderer';
|
|
46
|
+
export { default as TemplatePicker } from './components/cv/TemplatePicker';
|
|
47
|
+
export type { TemplatePickerProps } from './components/cv/TemplatePicker';
|
|
48
|
+
export { generateSampleTemplateData } from './components/cv/TemplatePicker';
|
|
49
|
+
export { RatingStars } from './components/ui/RatingStars';
|
|
50
|
+
export { BulletListTextarea } from './components/ui/BulletListTextarea';
|
|
51
|
+
export type { BulletListTextareaProps } from './components/ui/BulletListTextarea';
|
|
52
|
+
export { default as IndustrySelect } from './components/ui/IndustrySelect';
|
|
53
|
+
export type { IndustrySelectProps } from './components/ui/IndustrySelect';
|
|
54
|
+
export { default as DesignationSelect } from './components/ui/DesignationSelect';
|
|
55
|
+
export type { DesignationSelectProps } from './components/ui/DesignationSelect';
|
|
56
|
+
export { MultiSelectOptions } from './components/ui/MultiSelectOptions';
|
|
57
|
+
export { NoData } from './components/common/NoData';
|
|
58
|
+
export { Popover, PopoverTrigger, PopoverContent } from './components/ui/popover';
|
|
59
|
+
export { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, } from './components/ui/command';
|
|
26
60
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGxD,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,eAAe,EACf,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGxD,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,eAAe,EACf,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAGhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGtG,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACpF,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAGnF,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACjF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EACL,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,9 @@ export { initApi, getBaseURL, API } from './api-client';
|
|
|
3
3
|
export { WORKSTATUS, WORK_STATUS_VALUES, } from './types/easy-apply';
|
|
4
4
|
// Utils
|
|
5
5
|
export { apiRequest } from './utils/api-request';
|
|
6
|
+
export { generateSearchQuery } from './utils/generateSearchQuery';
|
|
7
|
+
export { monthsDropdown, yearsDropdown } from './utils/commonDropdownOptions';
|
|
8
|
+
export { cn } from './utils/cn';
|
|
6
9
|
// Hooks
|
|
7
10
|
export { useGetAllVacancy } from './hooks/useGetAllVacancy';
|
|
8
11
|
export { default as useGetAllVacancyDefault } from './hooks/useGetAllVacancy';
|
|
@@ -14,6 +17,31 @@ export { useVacancyQuestions } from './hooks/useVacancyQuestions';
|
|
|
14
17
|
export { useShareJob } from './hooks/useShareJob';
|
|
15
18
|
export { useEasyApplyMutations } from './hooks/useEasyApplyMutations';
|
|
16
19
|
export { useEasyApplyFormHook, easyApplyUserSchema, screeningAnswerSchema, screeningAnswersSchema, } from './hooks/useEasyApplyFormHook';
|
|
20
|
+
export { useDebounce } from './hooks/useDebounce';
|
|
21
|
+
export { useSkills } from './hooks/useSkills';
|
|
22
|
+
export { useIndustries } from './hooks/useIndustries';
|
|
23
|
+
export { useDesignations } from './hooks/useDesignations';
|
|
17
24
|
// Components
|
|
18
25
|
export { default as JobsClient } from './components/JobsClient';
|
|
19
26
|
export { default as JobDescriptionClient } from './components/JobDescriptionClient';
|
|
27
|
+
// CV Builder: utils
|
|
28
|
+
export { convertTemplateToBlocks, getDefaultColumns, getDefaultStyles, } from './utils/cv-block-converter';
|
|
29
|
+
export { preprocessTemplateCssClient, clearCssCacheClient, } from './utils/cv/pdf/styles/preprocessCssClient';
|
|
30
|
+
// CV Builder: stores
|
|
31
|
+
export { useCvPreview } from './stores/cvPreview.store';
|
|
32
|
+
export { useCvLayout } from './stores/cvLayout.store';
|
|
33
|
+
export { useCvDraftsStore } from './stores/cvDrafts.store';
|
|
34
|
+
// CV Builder: components (registry-based; no templates in package)
|
|
35
|
+
export { default as TemplateRenderer } from './components/cv/TemplateRenderer';
|
|
36
|
+
export { default as TemplatePicker } from './components/cv/TemplatePicker';
|
|
37
|
+
export { generateSampleTemplateData } from './components/cv/TemplatePicker';
|
|
38
|
+
// UI Components
|
|
39
|
+
export { RatingStars } from './components/ui/RatingStars';
|
|
40
|
+
export { BulletListTextarea } from './components/ui/BulletListTextarea';
|
|
41
|
+
export { default as IndustrySelect } from './components/ui/IndustrySelect';
|
|
42
|
+
export { default as DesignationSelect } from './components/ui/DesignationSelect';
|
|
43
|
+
export { MultiSelectOptions } from './components/ui/MultiSelectOptions';
|
|
44
|
+
export { NoData } from './components/common/NoData';
|
|
45
|
+
// UI Primitives (Popover, Command)
|
|
46
|
+
export { Popover, PopoverTrigger, PopoverContent } from './components/ui/popover';
|
|
47
|
+
export { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, } from './components/ui/command';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { TemplateData } from '../types/template.types';
|
|
2
|
+
import type { CvDraft } from '../types/cv-draft.types';
|
|
3
|
+
type LocalCvDraft = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
template: string;
|
|
7
|
+
cv_data: TemplateData | null;
|
|
8
|
+
isAnonymous: boolean;
|
|
9
|
+
backendId?: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
};
|
|
13
|
+
type CvDraftsState = {
|
|
14
|
+
drafts: LocalCvDraft[];
|
|
15
|
+
currentDraftId: string | null;
|
|
16
|
+
setCurrentDraft: (id: string | null) => void;
|
|
17
|
+
addDraft: (draft: Omit<LocalCvDraft, 'id' | 'createdAt' | 'updatedAt'>) => string;
|
|
18
|
+
updateDraft: (id: string, updates: Partial<LocalCvDraft>) => void;
|
|
19
|
+
deleteDraft: (id: string) => void;
|
|
20
|
+
getCurrentDraft: () => LocalCvDraft | null;
|
|
21
|
+
getDraftById: (id: string) => LocalCvDraft | null;
|
|
22
|
+
syncDraftToBackend: (localId: string, backendId: string) => void;
|
|
23
|
+
loadDraftsFromBackend: (backendDrafts: CvDraft[]) => void;
|
|
24
|
+
clearDrafts: () => void;
|
|
25
|
+
};
|
|
26
|
+
export declare const useCvDraftsStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<CvDraftsState>, "persist"> & {
|
|
27
|
+
persist: {
|
|
28
|
+
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<CvDraftsState, {
|
|
29
|
+
drafts: LocalCvDraft[];
|
|
30
|
+
currentDraftId: string | null;
|
|
31
|
+
}>>) => void;
|
|
32
|
+
clearStorage: () => void;
|
|
33
|
+
rehydrate: () => Promise<void> | void;
|
|
34
|
+
hasHydrated: () => boolean;
|
|
35
|
+
onHydrate: (fn: (state: CvDraftsState) => void) => () => void;
|
|
36
|
+
onFinishHydration: (fn: (state: CvDraftsState) => void) => () => void;
|
|
37
|
+
getOptions: () => Partial<import("zustand/middleware").PersistOptions<CvDraftsState, {
|
|
38
|
+
drafts: LocalCvDraft[];
|
|
39
|
+
currentDraftId: string | null;
|
|
40
|
+
}>>;
|
|
41
|
+
};
|
|
42
|
+
}>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=cvDrafts.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvDrafts.store.d.ts","sourceRoot":"","sources":["../../src/stores/cvDrafts.store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK,MAAM,CAAC;IAClF,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAClE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,eAAe,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAClD,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,qBAAqB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAyG5B,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { persist } from 'zustand/middleware';
|
|
3
|
+
export const useCvDraftsStore = create()(persist((set, get) => ({
|
|
4
|
+
drafts: [],
|
|
5
|
+
currentDraftId: null,
|
|
6
|
+
setCurrentDraft: (id) => set({ currentDraftId: id }),
|
|
7
|
+
addDraft: (draft) => {
|
|
8
|
+
const id = `local_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
9
|
+
const newDraft = {
|
|
10
|
+
...draft,
|
|
11
|
+
id,
|
|
12
|
+
createdAt: new Date().toISOString(),
|
|
13
|
+
updatedAt: new Date().toISOString(),
|
|
14
|
+
};
|
|
15
|
+
set((state) => ({
|
|
16
|
+
drafts: [...state.drafts, newDraft],
|
|
17
|
+
currentDraftId: id,
|
|
18
|
+
}));
|
|
19
|
+
return id;
|
|
20
|
+
},
|
|
21
|
+
updateDraft: (id, updates) => {
|
|
22
|
+
set((state) => ({
|
|
23
|
+
drafts: state.drafts.map((d) => d.id === id ? { ...d, ...updates, updatedAt: new Date().toISOString() } : d),
|
|
24
|
+
}));
|
|
25
|
+
},
|
|
26
|
+
deleteDraft: (id) => {
|
|
27
|
+
set((state) => ({
|
|
28
|
+
drafts: state.drafts.filter((d) => d.id !== id),
|
|
29
|
+
currentDraftId: state.currentDraftId === id ? null : state.currentDraftId,
|
|
30
|
+
}));
|
|
31
|
+
},
|
|
32
|
+
getCurrentDraft: () => {
|
|
33
|
+
const { drafts, currentDraftId } = get();
|
|
34
|
+
return drafts.find((d) => d.id === currentDraftId) || null;
|
|
35
|
+
},
|
|
36
|
+
getDraftById: (id) => {
|
|
37
|
+
const { drafts } = get();
|
|
38
|
+
return drafts.find((d) => d.id === id) || null;
|
|
39
|
+
},
|
|
40
|
+
syncDraftToBackend: (localId, backendId) => {
|
|
41
|
+
set((state) => ({
|
|
42
|
+
drafts: state.drafts.map((d) => d.id === localId ? { ...d, backendId } : d),
|
|
43
|
+
}));
|
|
44
|
+
},
|
|
45
|
+
loadDraftsFromBackend: (backendDrafts) => {
|
|
46
|
+
const { drafts: existingDrafts } = get();
|
|
47
|
+
const activeDrafts = backendDrafts.filter((draft) => draft.is_active !== false);
|
|
48
|
+
const syncedDrafts = activeDrafts.map((backendDraft) => {
|
|
49
|
+
const existing = existingDrafts.find((d) => d.backendId === backendDraft.id);
|
|
50
|
+
if (existing) {
|
|
51
|
+
return {
|
|
52
|
+
...existing,
|
|
53
|
+
name: backendDraft.name,
|
|
54
|
+
template: backendDraft.template,
|
|
55
|
+
cv_data: backendDraft.cv_data,
|
|
56
|
+
updatedAt: backendDraft.updated_at,
|
|
57
|
+
isAnonymous: false,
|
|
58
|
+
backendId: backendDraft.id,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
id: `backend_${backendDraft.id}`,
|
|
63
|
+
name: backendDraft.name,
|
|
64
|
+
template: backendDraft.template,
|
|
65
|
+
cv_data: backendDraft.cv_data,
|
|
66
|
+
isAnonymous: false,
|
|
67
|
+
backendId: backendDraft.id,
|
|
68
|
+
createdAt: backendDraft.created_at,
|
|
69
|
+
updatedAt: backendDraft.updated_at,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
const anonymousDrafts = existingDrafts.filter((d) => d.isAnonymous);
|
|
73
|
+
const backendIds = new Set(activeDrafts.map((d) => d.id));
|
|
74
|
+
const validSyncedDrafts = existingDrafts.filter((d) => !d.isAnonymous && d.backendId && backendIds.has(d.backendId));
|
|
75
|
+
const newSyncedDrafts = syncedDrafts.filter((d) => !validSyncedDrafts.some((e) => e.backendId === d.backendId));
|
|
76
|
+
const mergedDrafts = [...anonymousDrafts, ...validSyncedDrafts, ...newSyncedDrafts];
|
|
77
|
+
set({ drafts: mergedDrafts });
|
|
78
|
+
},
|
|
79
|
+
clearDrafts: () => set({ drafts: [], currentDraftId: null }),
|
|
80
|
+
}), {
|
|
81
|
+
name: 'cv-drafts-storage',
|
|
82
|
+
partialize: (state) => ({
|
|
83
|
+
drafts: state.drafts.filter((d) => d.isAnonymous),
|
|
84
|
+
currentDraftId: state.currentDraftId,
|
|
85
|
+
}),
|
|
86
|
+
}));
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CvLayout, CvBlock } from '../types/cv-blocks.types';
|
|
2
|
+
import type { TemplateData } from '../types/template.types';
|
|
3
|
+
type CvLayoutState = {
|
|
4
|
+
layout: CvLayout | null;
|
|
5
|
+
isEditMode: boolean;
|
|
6
|
+
loadTemplate: (templateSlug: string, data: TemplateData) => void;
|
|
7
|
+
addBlock: (block: CvBlock) => void;
|
|
8
|
+
updateBlock: (id: string, updates: Partial<CvBlock>) => void;
|
|
9
|
+
deleteBlock: (id: string) => void;
|
|
10
|
+
moveBlock: (id: string, newPosition: {
|
|
11
|
+
column?: number;
|
|
12
|
+
order?: number;
|
|
13
|
+
}) => void;
|
|
14
|
+
reorderBlocks: (ids: string[]) => void;
|
|
15
|
+
setGridColumns: (columns: number) => void;
|
|
16
|
+
setGlobalStyle: (key: string, value: unknown) => void;
|
|
17
|
+
toggleEditMode: () => void;
|
|
18
|
+
saveLayout: () => Promise<void>;
|
|
19
|
+
loadSavedLayout: (layoutId: string) => Promise<void>;
|
|
20
|
+
reset: () => void;
|
|
21
|
+
};
|
|
22
|
+
export declare const useCvLayout: import("zustand").UseBoundStore<import("zustand").StoreApi<CvLayoutState>>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=cvLayout.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvLayout.store.d.ts","sourceRoot":"","sources":["../../src/stores/cvLayout.store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAO5D,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACjE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,WAAW,4EA+HrB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { convertTemplateToBlocks, getDefaultColumns, getDefaultStyles, } from '../utils/cv-block-converter';
|
|
3
|
+
export const useCvLayout = create((set, get) => ({
|
|
4
|
+
layout: null,
|
|
5
|
+
isEditMode: false,
|
|
6
|
+
loadTemplate: (templateSlug, data) => {
|
|
7
|
+
const blocks = convertTemplateToBlocks(templateSlug, data);
|
|
8
|
+
const layout = {
|
|
9
|
+
id: `layout-${Date.now()}`,
|
|
10
|
+
name: `${templateSlug} - Custom`,
|
|
11
|
+
template: templateSlug,
|
|
12
|
+
grid: {
|
|
13
|
+
columns: getDefaultColumns(templateSlug),
|
|
14
|
+
gap: 16,
|
|
15
|
+
width: 210,
|
|
16
|
+
},
|
|
17
|
+
blocks,
|
|
18
|
+
globalStyles: getDefaultStyles(templateSlug),
|
|
19
|
+
};
|
|
20
|
+
set({ layout });
|
|
21
|
+
},
|
|
22
|
+
addBlock: (block) => set((state) => ({
|
|
23
|
+
layout: state.layout
|
|
24
|
+
? { ...state.layout, blocks: [...state.layout.blocks, block] }
|
|
25
|
+
: null,
|
|
26
|
+
})),
|
|
27
|
+
updateBlock: (id, updates) => set((state) => ({
|
|
28
|
+
layout: state.layout
|
|
29
|
+
? {
|
|
30
|
+
...state.layout,
|
|
31
|
+
blocks: state.layout.blocks.map((b) => b.id === id ? { ...b, ...updates } : b),
|
|
32
|
+
}
|
|
33
|
+
: null,
|
|
34
|
+
})),
|
|
35
|
+
deleteBlock: (id) => set((state) => ({
|
|
36
|
+
layout: state.layout
|
|
37
|
+
? {
|
|
38
|
+
...state.layout,
|
|
39
|
+
blocks: state.layout.blocks.filter((b) => b.id !== id),
|
|
40
|
+
}
|
|
41
|
+
: null,
|
|
42
|
+
})),
|
|
43
|
+
moveBlock: (id, { column, order }) => set((state) => {
|
|
44
|
+
if (!state.layout)
|
|
45
|
+
return state;
|
|
46
|
+
return {
|
|
47
|
+
layout: {
|
|
48
|
+
...state.layout,
|
|
49
|
+
blocks: state.layout.blocks.map((b) => {
|
|
50
|
+
if (b.id === id) {
|
|
51
|
+
return {
|
|
52
|
+
...b,
|
|
53
|
+
style: {
|
|
54
|
+
...b.style,
|
|
55
|
+
gridColumn: column !== undefined ? column : b.style.gridColumn,
|
|
56
|
+
order: order !== undefined ? order : b.style.order,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return b;
|
|
61
|
+
}),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}),
|
|
65
|
+
reorderBlocks: (ids) => set((state) => {
|
|
66
|
+
if (!state.layout)
|
|
67
|
+
return state;
|
|
68
|
+
const blockMap = new Map(state.layout.blocks.map((b) => [b.id, b]));
|
|
69
|
+
const reordered = ids
|
|
70
|
+
.map((id) => blockMap.get(id))
|
|
71
|
+
.filter(Boolean);
|
|
72
|
+
return {
|
|
73
|
+
layout: { ...state.layout, blocks: reordered },
|
|
74
|
+
};
|
|
75
|
+
}),
|
|
76
|
+
setGridColumns: (columns) => set((state) => ({
|
|
77
|
+
layout: state.layout
|
|
78
|
+
? { ...state.layout, grid: { ...state.layout.grid, columns } }
|
|
79
|
+
: null,
|
|
80
|
+
})),
|
|
81
|
+
setGlobalStyle: (key, value) => set((state) => ({
|
|
82
|
+
layout: state.layout
|
|
83
|
+
? {
|
|
84
|
+
...state.layout,
|
|
85
|
+
globalStyles: { ...state.layout.globalStyles, [key]: value },
|
|
86
|
+
}
|
|
87
|
+
: null,
|
|
88
|
+
})),
|
|
89
|
+
toggleEditMode: () => set((state) => ({ isEditMode: !state.isEditMode })),
|
|
90
|
+
saveLayout: async () => {
|
|
91
|
+
const { layout } = get();
|
|
92
|
+
if (!layout)
|
|
93
|
+
return;
|
|
94
|
+
try {
|
|
95
|
+
if (typeof localStorage !== 'undefined') {
|
|
96
|
+
localStorage.setItem('cv-layout-draft', JSON.stringify(layout));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (_err) {
|
|
100
|
+
/* noop */
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
loadSavedLayout: async (_layoutId) => {
|
|
104
|
+
try {
|
|
105
|
+
if (typeof localStorage === 'undefined')
|
|
106
|
+
return;
|
|
107
|
+
const saved = localStorage.getItem('cv-layout-draft');
|
|
108
|
+
if (saved)
|
|
109
|
+
set({ layout: JSON.parse(saved) });
|
|
110
|
+
}
|
|
111
|
+
catch (_err) {
|
|
112
|
+
/* noop */
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
reset: () => set({ layout: null }),
|
|
116
|
+
}));
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { TemplateData, TemplateSections, TemplatePersonalInfo } from '../types/template.types';
|
|
2
|
+
type CvPreviewState = {
|
|
3
|
+
slug: string;
|
|
4
|
+
live: TemplateData | null;
|
|
5
|
+
setSlug: (s: string) => void;
|
|
6
|
+
setPersonal: (p: Partial<TemplatePersonalInfo>) => void;
|
|
7
|
+
setSections: (s: Partial<TemplateSections>) => void;
|
|
8
|
+
setAll: (d: TemplateData) => void;
|
|
9
|
+
reset: () => void;
|
|
10
|
+
};
|
|
11
|
+
export declare const useCvPreview: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<CvPreviewState>, "persist"> & {
|
|
12
|
+
persist: {
|
|
13
|
+
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<CvPreviewState, {
|
|
14
|
+
slug: string;
|
|
15
|
+
live: TemplateData | null;
|
|
16
|
+
}>>) => void;
|
|
17
|
+
clearStorage: () => void;
|
|
18
|
+
rehydrate: () => Promise<void> | void;
|
|
19
|
+
hasHydrated: () => boolean;
|
|
20
|
+
onHydrate: (fn: (state: CvPreviewState) => void) => () => void;
|
|
21
|
+
onFinishHydration: (fn: (state: CvPreviewState) => void) => () => void;
|
|
22
|
+
getOptions: () => Partial<import("zustand/middleware").PersistOptions<CvPreviewState, {
|
|
23
|
+
slug: string;
|
|
24
|
+
live: TemplateData | null;
|
|
25
|
+
}>>;
|
|
26
|
+
};
|
|
27
|
+
}>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=cvPreview.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvPreview.store.d.ts","sourceRoot":"","sources":["../../src/stores/cvPreview.store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC;IACxD,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;EAsFxB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { persist } from 'zustand/middleware';
|
|
3
|
+
export const useCvPreview = create()(persist((set) => ({
|
|
4
|
+
slug: 'professional',
|
|
5
|
+
live: null,
|
|
6
|
+
setSlug: (slug) => set({ slug }),
|
|
7
|
+
setPersonal: (p) => set((st) => {
|
|
8
|
+
if (st.live) {
|
|
9
|
+
return {
|
|
10
|
+
live: { ...st.live, personalInfo: { ...st.live.personalInfo, ...p } },
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
live: {
|
|
15
|
+
personalInfo: {
|
|
16
|
+
firstName: '',
|
|
17
|
+
lastName: '',
|
|
18
|
+
email: '',
|
|
19
|
+
phone: '',
|
|
20
|
+
location: { city: '', state: '', country: 'Nepal' },
|
|
21
|
+
summary: '',
|
|
22
|
+
links: [],
|
|
23
|
+
...p,
|
|
24
|
+
},
|
|
25
|
+
sections: {
|
|
26
|
+
education: [],
|
|
27
|
+
experience: [],
|
|
28
|
+
projects: [],
|
|
29
|
+
skills: [],
|
|
30
|
+
certifications: [],
|
|
31
|
+
languages: [],
|
|
32
|
+
references: [],
|
|
33
|
+
trainings: [],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}),
|
|
38
|
+
setSections: (s) => set((st) => {
|
|
39
|
+
if (st.live) {
|
|
40
|
+
return {
|
|
41
|
+
live: {
|
|
42
|
+
...st.live,
|
|
43
|
+
sections: {
|
|
44
|
+
...st.live.sections,
|
|
45
|
+
...Object.fromEntries(Object.entries(s).map(([k, v]) => [
|
|
46
|
+
k,
|
|
47
|
+
Array.isArray(v) ? v : st.live.sections[k],
|
|
48
|
+
])),
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
live: {
|
|
55
|
+
personalInfo: {
|
|
56
|
+
firstName: '',
|
|
57
|
+
lastName: '',
|
|
58
|
+
email: '',
|
|
59
|
+
phone: '',
|
|
60
|
+
location: { city: '', state: '', country: 'Nepal' },
|
|
61
|
+
summary: '',
|
|
62
|
+
links: [],
|
|
63
|
+
},
|
|
64
|
+
sections: {
|
|
65
|
+
education: [],
|
|
66
|
+
experience: [],
|
|
67
|
+
projects: [],
|
|
68
|
+
skills: [],
|
|
69
|
+
certifications: [],
|
|
70
|
+
languages: [],
|
|
71
|
+
references: [],
|
|
72
|
+
trainings: [],
|
|
73
|
+
...s,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}),
|
|
78
|
+
setAll: (d) => set({ live: d }),
|
|
79
|
+
reset: () => set({ live: null }),
|
|
80
|
+
}), { name: 'cv-preview-storage', partialize: (state) => ({ slug: state.slug, live: state.live }) }));
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type CvBlockType = 'header' | 'summary' | 'experience' | 'education' | 'skills' | 'projects' | 'certifications' | 'languages' | 'references' | 'custom-text';
|
|
2
|
+
export type CvBlockStyle = {
|
|
3
|
+
gridColumn?: number | string;
|
|
4
|
+
gridRow?: number | string;
|
|
5
|
+
order?: number;
|
|
6
|
+
marginTop?: number;
|
|
7
|
+
marginBottom?: number;
|
|
8
|
+
padding?: number;
|
|
9
|
+
fontSize?: string;
|
|
10
|
+
fontWeight?: string;
|
|
11
|
+
color?: string;
|
|
12
|
+
backgroundColor?: string;
|
|
13
|
+
borderRadius?: number;
|
|
14
|
+
border?: string;
|
|
15
|
+
};
|
|
16
|
+
export type CvBlock = {
|
|
17
|
+
id: string;
|
|
18
|
+
type: CvBlockType;
|
|
19
|
+
data: unknown;
|
|
20
|
+
style: CvBlockStyle;
|
|
21
|
+
minWidth?: number;
|
|
22
|
+
maxWidth?: number;
|
|
23
|
+
resizable?: boolean;
|
|
24
|
+
movable?: boolean;
|
|
25
|
+
deletable?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type CvLayout = {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
template: string;
|
|
31
|
+
grid: {
|
|
32
|
+
columns: number;
|
|
33
|
+
gap: number;
|
|
34
|
+
width: number;
|
|
35
|
+
};
|
|
36
|
+
blocks: CvBlock[];
|
|
37
|
+
globalStyles: {
|
|
38
|
+
fontFamily?: string;
|
|
39
|
+
primaryColor?: string;
|
|
40
|
+
backgroundColor?: string;
|
|
41
|
+
textColor?: string;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=cv-blocks.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cv-blocks.types.d.ts","sourceRoot":"","sources":["../../src/types/cv-blocks.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,WAAW,GACX,YAAY,GACZ,aAAa,CAAC;AAElB,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TemplateData } from './template.types';
|
|
2
|
+
export interface CvDraft {
|
|
3
|
+
id: string;
|
|
4
|
+
user_id: string | null;
|
|
5
|
+
name: string;
|
|
6
|
+
template: string;
|
|
7
|
+
cv_data: TemplateData;
|
|
8
|
+
is_active: boolean;
|
|
9
|
+
created_at: string;
|
|
10
|
+
updated_at: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CreateCvDraftPayload {
|
|
13
|
+
name?: string;
|
|
14
|
+
template?: string;
|
|
15
|
+
cv_data: TemplateData;
|
|
16
|
+
}
|
|
17
|
+
export interface UpdateCvDraftPayload {
|
|
18
|
+
name?: string;
|
|
19
|
+
template?: string;
|
|
20
|
+
cv_data?: TemplateData;
|
|
21
|
+
is_active?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface CvDraftListResponse {
|
|
24
|
+
data: CvDraft[];
|
|
25
|
+
pagination?: {
|
|
26
|
+
total: number;
|
|
27
|
+
page: number;
|
|
28
|
+
pages: number;
|
|
29
|
+
nextPage: number | null;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=cv-draft.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cv-draft.types.d.ts","sourceRoot":"","sources":["../../src/types/cv-draft.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|