From 023fd272b10dc97b5752aa36451372a9509b943a Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Mon, 7 Jul 2025 16:44:48 +0530 Subject: [PATCH 1/3] feat: badge list and form --- frontend/components.d.ts | 4 + .../src/components/Controls/Autocomplete.vue | 236 ++++++++++-------- frontend/src/components/Controls/Code.vue | 7 + .../src/components/Controls/CodeEditor.vue | 2 +- frontend/src/components/Controls/Uploader.vue | 76 ++++++ .../components/Modals/ZoomAccountModal.vue | 19 +- .../src/components/Settings/BadgeForm.vue | 222 ++++++++++++++++ frontend/src/components/Settings/Badges.vue | 229 +++++++++++++++++ .../src/components/Settings/BrandSettings.vue | 14 +- frontend/src/components/Settings/Settings.vue | 78 +++--- .../src/components/Settings/ZoomSettings.vue | 2 +- frontend/src/components/Settings/types.ts | 31 +++ lms/lms/doctype/lms_badge/lms_badge.json | 10 +- lms/lms/doctype/lms_badge/lms_badge.py | 8 - 14 files changed, 753 insertions(+), 185 deletions(-) create mode 100644 frontend/src/components/Controls/Uploader.vue create mode 100644 frontend/src/components/Settings/BadgeForm.vue create mode 100644 frontend/src/components/Settings/Badges.vue diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 12a804de..c96428af 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -19,6 +19,9 @@ declare module 'vue' { AssignmentForm: typeof import('./src/components/Modals/AssignmentForm.vue')['default'] AudioBlock: typeof import('./src/components/AudioBlock.vue')['default'] Autocomplete: typeof import('./src/components/Controls/Autocomplete.vue')['default'] + BadgeForm: typeof import('./src/components/Settings/BadgeForm.vue')['default'] + Badges: typeof import('./src/components/Settings/Badges.vue')['default'] + Bagdes: typeof import('./src/components/Settings/Bagdes.vue')['default'] BatchCard: typeof import('./src/components/BatchCard.vue')['default'] BatchCourseModal: typeof import('./src/components/Modals/BatchCourseModal.vue')['default'] BatchCourses: typeof import('./src/components/BatchCourses.vue')['default'] @@ -99,6 +102,7 @@ declare module 'vue' { Tags: typeof import('./src/components/Tags.vue')['default'] UnsplashImageBrowser: typeof import('./src/components/UnsplashImageBrowser.vue')['default'] UpcomingEvaluations: typeof import('./src/components/UpcomingEvaluations.vue')['default'] + Uploader: typeof import('./src/components/Controls/Uploader.vue')['default'] UploadPlugin: typeof import('./src/components/UploadPlugin.vue')['default'] UserAvatar: typeof import('./src/components/UserAvatar.vue')['default'] UserDropdown: typeof import('./src/components/UserDropdown.vue')['default'] diff --git a/frontend/src/components/Controls/Autocomplete.vue b/frontend/src/components/Controls/Autocomplete.vue index ca6a2245..41acfff4 100644 --- a/frontend/src/components/Controls/Autocomplete.vue +++ b/frontend/src/components/Controls/Autocomplete.vue @@ -1,128 +1,140 @@ diff --git a/frontend/src/components/Modals/ZoomAccountModal.vue b/frontend/src/components/Modals/ZoomAccountModal.vue index 0bc499dc..0bed0fd6 100644 --- a/frontend/src/components/Modals/ZoomAccountModal.vue +++ b/frontend/src/components/Modals/ZoomAccountModal.vue @@ -41,7 +41,7 @@ v-model="account.member" :label="__('Member')" doctype="Course Evaluator" - :onCreate="(value, close) => openSettings('Members', close)" + :onCreate="(value: string, close: () => void) => openSettings('Members', close)" :required="true" /> void; onError: (err: any) => void } ) => void } + setValue: { + submit: ( + data: ZoomAccount, + options: { onSuccess: () => void; onError: (err: any) => void } + ) => void + } } const show = defineModel('show') @@ -137,7 +143,7 @@ watch(show, (val) => { } }) -const saveAccount = (close) => { +const saveAccount = (close: () => void) => { if (props.accountID == 'new') { createAccount(close) } else { @@ -145,7 +151,7 @@ const saveAccount = (close) => { } } -const createAccount = (close) => { +const createAccount = (close: () => void) => { zoomAccounts.value?.insert.submit( { account_name: account.name, @@ -167,7 +173,7 @@ const createAccount = (close) => { ) } -const updateAccount = async (close) => { +const updateAccount = async (close: () => void) => { if (props.accountID != account.name) { await renameDoc() } @@ -182,11 +188,12 @@ const renameDoc = async () => { }) } -const setValue = (close) => { +const setValue = (close: () => void) => { zoomAccounts.value?.setValue.submit( { ...account, name: account.name, + account_name: props.accountID, }, { onSuccess() { @@ -194,7 +201,7 @@ const setValue = (close) => { close() toast.success(__('Zoom Account updated successfully')) }, - onError(err) { + onError(err: any) { close() toast.error( cleanError(err.messages[0]) || __('Error updating Zoom Account') diff --git a/frontend/src/components/Settings/BadgeForm.vue b/frontend/src/components/Settings/BadgeForm.vue new file mode 100644 index 00000000..9b0c8aa2 --- /dev/null +++ b/frontend/src/components/Settings/BadgeForm.vue @@ -0,0 +1,222 @@ + + diff --git a/frontend/src/components/Settings/Badges.vue b/frontend/src/components/Settings/Badges.vue new file mode 100644 index 00000000..33767950 --- /dev/null +++ b/frontend/src/components/Settings/Badges.vue @@ -0,0 +1,229 @@ + + diff --git a/frontend/src/components/Settings/BrandSettings.vue b/frontend/src/components/Settings/BrandSettings.vue index 7da5f1e5..2f6a69fe 100644 --- a/frontend/src/components/Settings/BrandSettings.vue +++ b/frontend/src/components/Settings/BrandSettings.vue @@ -17,7 +17,7 @@
- +