diff --git a/common/portfolio.formSchema.js b/common/portfolio.formSchema.js new file mode 100644 index 0000000..3e6641b --- /dev/null +++ b/common/portfolio.formSchema.js @@ -0,0 +1,113 @@ +import SchemaForm from 'formvuelatte'; +import { FormInput, FormTextArea } from '../management-ui/src/components/form/'; + +export default { + schema: { + name: { + component: SchemaForm, + schema: { + firstName: { + component: FormInput, + label: "Your first name", + required: true + }, + lastName: { + component: FormInput, + label: "Your last name", + required: true + }, + } + }, + profession: { + component: FormInput, + label: "Your profession", + reqiured: true + }, + aboutMe: { + component: FormTextArea, + label: "A brief description of yourself", + required: true + }, + profileImageUrl: { + component: FormInput, + label: "Web url to access the provided profile image" + }, + contact: { + component: SchemaForm, + schema: { + email: { + component: FormInput, + label: "Public email address", + config: { + type: "email" + } + }, + telephone: { + component: FormInput, + label: "Public telephone number" + } + } + }, + externalProfiles: { + component: SchemaForm, + schema: { + github: { + component: FormInput, + label: "Github profile name" + }, + linkedIn: { + component: FormInput, + label: "LinkedIn profile name" + }, + stackOverflow: { + component: FormInput, + label: "Stack Overflow profile name" + } + } + }, + education: { + component: SchemaForm, + schema: { + institution: { + component: FormInput, + label: "Name of the education establishment", + required: true + }, + date: { + component: FormInput, + label: "When the institution was attended", + required: true + }, + qualifications: { + component: FormInput, + label: "Qualification achieved at the instution", + required: true + } + } + }, + experience: { + component: SchemaForm, + schema: { + organisation: { + component: FormInput, + label: "Name of the organisation", + required: true + }, + date: { + component: FormInput, + label: "When work was done with the organisation", + required: true + }, + description: { + component: FormInput, + label: "Brief description of the role", + required: true + }, + projects: { + component: FormInput, + label: "Projects worked on at the organisation" + } + } + } + } +} \ No newline at end of file diff --git a/management-ui/package-lock.json b/management-ui/package-lock.json index 14cd26f..9d42875 100644 --- a/management-ui/package-lock.json +++ b/management-ui/package-lock.json @@ -1916,6 +1916,7 @@ "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -3165,8 +3166,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true + "dev": true }, "coa": { "version": "2.0.2", @@ -5315,7 +5315,8 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, "fast-glob": { "version": "2.2.7", @@ -5334,7 +5335,8 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -5593,11 +5595,6 @@ "for-in": "^1.0.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -5615,6 +5612,11 @@ "mime-types": "^2.1.12" } }, + "formvuelatte": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/formvuelatte/-/formvuelatte-0.2.3.tgz", + "integrity": "sha512-Mh2wN8sduW8lkKefw8+5knHPhEEtZNnb0CzsJMFLsatFXnH4EwZZrVl3NHKBcHyX9GzGXJMIwgpuUMQimuM3RQ==" + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -7997,14 +7999,6 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-pointer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.0.tgz", - "integrity": "sha1-jlAFUKaqxUZKRzN32leqbMIoKNc=", - "requires": { - "foreach": "^2.0.4" - } - }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -8014,7 +8008,8 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -10475,7 +10470,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "q": { "version": "1.5.1", @@ -11024,8 +11020,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true, - "optional": true + "dev": true }, "rx-lite-aggregates": { "version": "4.0.8", @@ -12797,6 +12792,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -13009,15 +13005,6 @@ "resolved": "https://registry.npmjs.org/vue-icon/-/vue-icon-2.1.1.tgz", "integrity": "sha512-CWIOChSRQ2IW8LxLGRiryBYH+LAGRSB8ponIJEMNtwFs2fBLBnkhr7ofCnneaMnsovtbIJ09CDD5vzQuiRRukw==" }, - "vue-json-schema-form": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vue-json-schema-form/-/vue-json-schema-form-1.0.4.tgz", - "integrity": "sha512-dZ8ujPFGWeFlVKO7AlY4FGZrAVxl1j4M9HNxuagb9Ol4r8XXKt6ZRdFg/Fc9I2jQECYdUZoZJRAOrPeVydhAIg==", - "requires": { - "ajv": "^6.5.4", - "json-pointer": "^0.6.0" - } - }, "vue-loader": { "version": "15.7.0", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", diff --git a/management-ui/package.json b/management-ui/package.json index c8a7091..72d5057 100644 --- a/management-ui/package.json +++ b/management-ui/package.json @@ -12,9 +12,9 @@ "buefy": "^0.7.7", "core-js": "^2.6.5", "firebase": "^6.1.0", + "formvuelatte": "^0.2.3", "vue": "^2.6.10", "vue-icon": "^2.1.1", - "vue-json-schema-form": "^1.0.4", "vue-router": "^3.0.3", "vue-toasted": "^1.1.27", "vuex": "^3.0.1", diff --git a/management-ui/src/components/form/FormInput.vue b/management-ui/src/components/form/FormInput.vue new file mode 100644 index 0000000..315e831 --- /dev/null +++ b/management-ui/src/components/form/FormInput.vue @@ -0,0 +1,23 @@ + + + diff --git a/management-ui/src/components/form/FormTextArea.vue b/management-ui/src/components/form/FormTextArea.vue new file mode 100644 index 0000000..5c97b58 --- /dev/null +++ b/management-ui/src/components/form/FormTextArea.vue @@ -0,0 +1,23 @@ + + + diff --git a/management-ui/src/components/form/index.js b/management-ui/src/components/form/index.js new file mode 100644 index 0000000..7f26618 --- /dev/null +++ b/management-ui/src/components/form/index.js @@ -0,0 +1,15 @@ +import FormInput from './FormInput.vue'; +import FormTextArea from './FormTextArea.vue'; + +const components = [ + { + name: 'form-input', + component: FormInput + }, + { + name: 'form-text-area', + component: FormTextArea + } +]; + +export default components; diff --git a/management-ui/src/containers/portfolio/Edit.vue b/management-ui/src/containers/portfolio/Edit.vue index b4e030d..048bf8b 100644 --- a/management-ui/src/containers/portfolio/Edit.vue +++ b/management-ui/src/containers/portfolio/Edit.vue @@ -7,16 +7,19 @@ - +