2
0
mirror of https://github.com/frappe/books.git synced 2025-02-11 16:39:25 +00:00
books/src/pages/SetupWizard/SetupWizard.vue

129 lines
3.5 KiB
Vue
Raw Normal View History

<template>
2019-11-19 23:20:33 +05:30
<div class="py-10 flex-1 bg-white window-drag">
<div class="px-12">
<h1 class="text-2xl font-semibold">{{ _('Setup your organization') }}</h1>
<p class="text-gray-600">
{{ _('These settings can be changed later') }}
</p>
</div>
<div class="px-8 mt-5 window-no-drag" v-if="doc">
<div class="flex items-center border bg-brand rounded-xl px-6 py-5 mb-4">
<FormControl
:df="meta.getField('companyLogo')"
:value="doc.companyLogo"
@change="value => setValue('companyLogo', value)"
/>
<div class="ml-2">
<FormControl
ref="companyField"
:df="meta.getField('companyName')"
:value="doc.companyName"
@change="value => setValue('companyName', value)"
:input-class="
classes => [
'bg-transparent font-semibold text-xl text-white placeholder-blue-200 focus:outline-none focus:bg-blue-600 px-3 rounded py-1'
]
"
:autofocus="true"
/>
<FormControl
:df="meta.getField('email')"
:value="doc.email"
@change="value => setValue('email', value)"
:input-class="
classes => [
'text-base bg-transparent text-white placeholder-blue-200 focus:bg-blue-600 focus:outline-none rounded px-3 py-1'
]
"
/>
</div>
</div>
2019-11-19 23:20:33 +05:30
<TwoColumnForm :fields="fields" :doc="doc" />
</div>
<div class="px-8 flex justify-end mt-5 window-no-drag">
<Button
@click="submit"
type="primary"
class="text-white text-sm"
:disabled="!valuesFilled || loading"
>
{{ buttonText }}
</Button>
</div>
2018-07-14 18:45:21 +05:30
</div>
</template>
<script>
2018-07-05 15:44:49 +05:30
import frappe from 'frappejs';
2019-11-19 23:20:33 +05:30
import TwoColumnForm from '@/components/TwoColumnForm';
import FormControl from '@/components/Controls/FormControl';
import Button from '@/components/Button';
import setupCompany from './setupCompany';
import { handleErrorWithDialog, showMessageDialog } from '@/utils';
export default {
2018-07-14 18:45:21 +05:30
name: 'SetupWizard',
data() {
return {
doc: null,
loading: false,
valuesFilled: false
};
},
provide() {
return {
doctype: 'SetupWizard',
name: 'SetupWizard'
2018-07-14 18:45:21 +05:30
};
},
components: {
2019-11-19 23:20:33 +05:30
TwoColumnForm,
FormControl,
Button
2018-07-14 18:45:21 +05:30
},
async mounted() {
2019-07-24 16:24:34 +05:30
this.doc = await frappe.newDoc({ doctype: 'SetupWizard' });
this.doc.on('change', () => {
this.valuesFilled = this.allValuesFilled();
});
2018-07-14 18:45:21 +05:30
},
methods: {
setValue(fieldname, value) {
this.doc
.set(fieldname, value)
.catch(e => handleErrorWithDialog(e, this.doc));
},
allValuesFilled() {
let values = this.meta.quickEditFields.map(
fieldname => this.doc[fieldname]
);
return values.every(Boolean);
},
2018-07-14 18:45:21 +05:30
async submit() {
if (!this.allValuesFilled()) {
showMessageDialog({ message: this._('Please fill all values') });
return;
}
2018-10-05 11:05:20 +05:30
try {
this.loading = true;
await setupCompany(this.doc);
this.$emit('setup-complete');
2018-10-05 11:05:20 +05:30
} catch (e) {
this.loading = false;
handleErrorWithDialog(e, this.doc);
2018-10-05 11:05:20 +05:30
}
2018-07-14 18:45:21 +05:30
}
},
computed: {
meta() {
return frappe.getMeta('SetupWizard');
},
2018-07-14 18:45:21 +05:30
fields() {
return this.meta.getQuickEditFields();
},
buttonText() {
return this.loading ? this._('Setting Up...') : this._('Next');
}
2018-07-14 18:45:21 +05:30
}
};
</script>