feat: email notifications for published courses
This commit is contained in:
@@ -55,7 +55,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="text-ink-red-3">
|
||||
<div v-else-if class="text-ink-red-3">
|
||||
{{ __('No slots available for the selected course.') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -65,23 +65,9 @@ const saveSettings = createResource({
|
||||
})
|
||||
|
||||
const update = () => {
|
||||
let fieldsToSave = {}
|
||||
let imageFields = ['favicon', 'banner_image']
|
||||
props.fields.forEach((f) => {
|
||||
if (imageFields.includes(f.name)) {
|
||||
fieldsToSave[f.name] =
|
||||
branding.data[f.name] && branding.data[f.name].file_url
|
||||
? branding.data[f.name].file_url
|
||||
: null
|
||||
} else {
|
||||
fieldsToSave[f.name] = branding.data[f.name]
|
||||
}
|
||||
})
|
||||
|
||||
fieldsToSave['app_logo'] = fieldsToSave['banner_image']
|
||||
saveSettings.submit(
|
||||
{
|
||||
fields: fieldsToSave,
|
||||
fields: getFieldsToSave(),
|
||||
},
|
||||
{
|
||||
onSuccess(data) {
|
||||
@@ -91,18 +77,36 @@ const update = () => {
|
||||
)
|
||||
}
|
||||
|
||||
watch(branding, (updatedDoc) => {
|
||||
let textFields = []
|
||||
let imageFields = []
|
||||
const getFieldsToSave = () => {
|
||||
let imageFields = ['favicon', 'banner_image']
|
||||
let fieldsToSave = {}
|
||||
|
||||
props.fields.forEach((f) => {
|
||||
if (f.type === 'Upload') {
|
||||
imageFields.push(f.name)
|
||||
} else {
|
||||
textFields.push(f.name)
|
||||
}
|
||||
props.sections.forEach((section) => {
|
||||
section.columns.forEach((column) => {
|
||||
column.fields.forEach((field) => {
|
||||
if (imageFields.includes(field.name)) {
|
||||
fieldsToSave[field.name] =
|
||||
branding.data[field.name] && branding.data[field.name].file_url
|
||||
? branding.data[field.name].file_url
|
||||
: null
|
||||
} else {
|
||||
fieldsToSave[field.name] = branding.data[field.name]
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
fieldsToSave['app_logo'] = fieldsToSave['banner_image']
|
||||
return fieldsToSave
|
||||
}
|
||||
|
||||
watch(branding, (updatedDoc) => {
|
||||
updateDirtyState(updatedDoc)
|
||||
})
|
||||
|
||||
const updateDirtyState = (updatedDoc) => {
|
||||
const { textFields, imageFields } = segregateFields()
|
||||
|
||||
textFields.forEach((field) => {
|
||||
if (updatedDoc.data[field] != updatedDoc.previousData[field]) {
|
||||
isDirty.value = true
|
||||
@@ -111,11 +115,28 @@ watch(branding, (updatedDoc) => {
|
||||
|
||||
imageFields.forEach((field) => {
|
||||
if (
|
||||
updatedDoc.data[field] &&
|
||||
updatedDoc.data[field].file_url != updatedDoc.previousData[field].file_url
|
||||
updatedDoc.data[field]?.file_url != updatedDoc.previousData[field]?.file_url
|
||||
) {
|
||||
isDirty.value = true
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const segregateFields = () => {
|
||||
let textFields = []
|
||||
let imageFields = []
|
||||
|
||||
props.sections.forEach(section => {
|
||||
section.columns.forEach(column => {
|
||||
column.fields.forEach(field => {
|
||||
if (field.type === 'Upload') {
|
||||
imageFields.push(field.name)
|
||||
} else {
|
||||
textFields.push(field.name)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
return { textFields, imageFields }
|
||||
}
|
||||
</script>
|
||||
|
||||
5611
frontend/yarn.lock
Normal file
5611
frontend/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user