@fishawack/lab-velocity 2.0.0-beta.4 → 2.0.0-beta.41

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.
Files changed (110) hide show
  1. package/README.md +441 -37
  2. package/_Build/vue/components/basic/Button.vue +1 -1
  3. package/_Build/vue/components/form/Checkbox.vue +10 -0
  4. package/_Build/vue/components/form/Select.vue +223 -33
  5. package/_Build/vue/components/form/Spinner.vue +5 -0
  6. package/_Build/vue/components/layout/Alert.vue +5 -5
  7. package/_Build/vue/components/layout/Audit.vue +75 -0
  8. package/_Build/vue/{modules/AuthModule/components/VBreadcrumbs.vue → components/layout/Breadcrumbs.vue} +4 -4
  9. package/_Build/vue/{modules/AuthModule/components → components/layout}/Chips.vue +2 -2
  10. package/_Build/vue/components/layout/Footer.vue +11 -10
  11. package/_Build/vue/{modules/AuthModule/components/VFormFooter.vue → components/layout/FormFooter.vue} +13 -7
  12. package/_Build/vue/{modules/AuthModule/components → components/layout}/FormRole.vue +10 -8
  13. package/_Build/vue/components/layout/Layout.vue +76 -0
  14. package/_Build/vue/components/layout/Navigation.vue +77 -0
  15. package/_Build/vue/{modules/AuthModule/components/VPageHeader.vue → components/layout/PageHeader.vue} +7 -2
  16. package/_Build/vue/components/layout/SideBar.vue +26 -0
  17. package/_Build/vue/{modules/AuthModule/components/VTable.vue → components/layout/Table.vue} +32 -16
  18. package/_Build/vue/{modules/AuthModule/components/VTableSorter.vue → components/layout/TableSorter.vue} +68 -43
  19. package/_Build/vue/components/layout/pageTitle.vue +1 -1
  20. package/_Build/vue/components/navigation/MenuItem.vue +7 -2
  21. package/_Build/vue/components/navigation/MenuItemGroup.vue +7 -2
  22. package/_Build/vue/modules/AuthModule/js/axios.js +19 -0
  23. package/_Build/vue/modules/AuthModule/js/router.js +24 -89
  24. package/_Build/vue/modules/AuthModule/js/store.js +15 -6
  25. package/_Build/vue/modules/AuthModule/routes/PCompanies/columns.js +268 -0
  26. package/_Build/vue/modules/AuthModule/routes/PCompanies/resource.js +213 -0
  27. package/_Build/vue/modules/AuthModule/routes/PTeams/resource.js +334 -0
  28. package/_Build/vue/modules/AuthModule/routes/PUsers/columns.js +349 -0
  29. package/_Build/vue/modules/AuthModule/routes/PUsers/resource.js +203 -0
  30. package/_Build/vue/modules/AuthModule/routes/account-exists.vue +2 -2
  31. package/_Build/vue/modules/AuthModule/routes/change-password.vue +23 -24
  32. package/_Build/vue/modules/AuthModule/routes/container.vue +2 -11
  33. package/_Build/vue/modules/AuthModule/routes/expired-reset.vue +4 -4
  34. package/_Build/vue/modules/AuthModule/routes/expired-verification.vue +9 -8
  35. package/_Build/vue/modules/AuthModule/routes/force-reset.vue +39 -50
  36. package/_Build/vue/modules/AuthModule/routes/forgot.vue +4 -4
  37. package/_Build/vue/modules/AuthModule/routes/login.vue +7 -11
  38. package/_Build/vue/modules/AuthModule/routes/logincallback.vue +1 -3
  39. package/_Build/vue/modules/AuthModule/routes/loginsso.vue +7 -9
  40. package/_Build/vue/modules/AuthModule/routes/logout.vue +1 -3
  41. package/_Build/vue/modules/AuthModule/routes/logoutheadless.vue +1 -3
  42. package/_Build/vue/modules/AuthModule/routes/register.vue +19 -21
  43. package/_Build/vue/modules/AuthModule/routes/reset.vue +14 -13
  44. package/_Build/vue/modules/AuthModule/routes/success-forgot.vue +8 -7
  45. package/_Build/vue/modules/AuthModule/routes/success-reset.vue +2 -2
  46. package/_Build/vue/modules/AuthModule/routes/success-verify.vue +1 -3
  47. package/_Build/vue/modules/AuthModule/routes/verify.vue +11 -14
  48. package/_Build/vue/modules/resource/Children/create.vue +81 -0
  49. package/_Build/vue/modules/resource/Children/edit.vue +106 -0
  50. package/_Build/vue/modules/resource/Children/index.vue +42 -0
  51. package/_Build/vue/modules/resource/Children/partials/form.vue +61 -0
  52. package/_Build/vue/modules/resource/Children/show.vue +144 -0
  53. package/_Build/vue/modules/resource/index.js +545 -0
  54. package/_Build/vue/modules/resource/parent.vue +63 -0
  55. package/_base.scss +0 -1
  56. package/_defaults.scss +2 -13
  57. package/_variables.scss +9 -4
  58. package/components/_alert.scss +5 -0
  59. package/components/_auth.scss +163 -0
  60. package/components/_basic.scss +55 -0
  61. package/components/_breadcrumbs.scss +39 -0
  62. package/components/_button.scss +304 -0
  63. package/components/_cascader.scss +12 -0
  64. package/components/_checkbox.scss +41 -0
  65. package/components/_chip.scss +24 -0
  66. package/components/_collapse.scss +24 -0
  67. package/components/_datepicker.scss +53 -0
  68. package/components/_descriptions.scss +2 -0
  69. package/components/_footer.scss +47 -0
  70. package/components/_form.scss +24 -0
  71. package/components/_header.scss +30 -0
  72. package/components/_icon.scss +25 -0
  73. package/components/_inputNumber.scss +22 -0
  74. package/components/_layout.scss +56 -0
  75. package/components/_link.scss +44 -0
  76. package/components/_loader.scss +43 -0
  77. package/components/_menu.scss +112 -0
  78. package/components/_modal.scss +24 -0
  79. package/components/_pageTitle.scss +8 -0
  80. package/components/_permissionLegend.scss +18 -0
  81. package/components/_select.scss +29 -0
  82. package/components/_sidebar.scss +41 -0
  83. package/components/_switch.scss +14 -0
  84. package/components/_table.scss +20 -0
  85. package/components/_tooltip.scss +4 -0
  86. package/components/_typography.scss +162 -0
  87. package/components/_upload.scss +15 -0
  88. package/components/_wysiwyg.scss +7 -0
  89. package/components/_wysiwyg2.scss +142 -0
  90. package/index.js +16 -1
  91. package/package.json +5 -3
  92. package/vendor.scss +0 -1
  93. package/_Build/vue/components/layout/sideBar.vue +0 -25
  94. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/Upload/upload.vue +0 -251
  95. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/create.vue +0 -62
  96. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/edit.vue +0 -98
  97. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/index.vue +0 -90
  98. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/partials/form.vue +0 -173
  99. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/Children/show.vue +0 -262
  100. package/_Build/vue/modules/AuthModule/adminRoutes/PCompanies/parent.vue +0 -36
  101. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/create.vue +0 -112
  102. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/edit.vue +0 -103
  103. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/index.vue +0 -112
  104. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/partials/form.vue +0 -169
  105. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/Children/show.vue +0 -120
  106. package/_Build/vue/modules/AuthModule/adminRoutes/PUsers/parent.vue +0 -36
  107. /package/_Build/vue/{modules/AuthModule/components → components/layout}/AuthModal.vue +0 -0
  108. /package/_Build/vue/{modules/AuthModule/components → components/layout}/Chip.vue +0 -0
  109. /package/_Build/vue/{modules/AuthModule/components/VPasswordValidation.vue → components/layout/PasswordValidation.vue} +0 -0
  110. /package/_Build/vue/{modules/AuthModule/components/VRoleLegend.vue → components/layout/RoleLegend.vue} +0 -0
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
3
+ <div class="grid__1/1">
4
+ <div class="grid__1/1 mb-4">
5
+ <h2 class="h1">Edit {{ resource.singular }}</h2>
6
+ </div>
7
+ <div class="grid__1/2">
8
+ <component
9
+ :is="resource.form.component ?? 'XForm'"
10
+ ref="form"
11
+ :form="form"
12
+ :submit="submit"
13
+ :method="method"
14
+ :resource="resource"
15
+ :model="model"
16
+ />
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <script>
23
+ import Form from "form-backend-validation";
24
+
25
+ export default {
26
+ components: {
27
+ XForm: require("./partials/form.vue").default,
28
+ },
29
+
30
+ props: {
31
+ resource: {
32
+ type: Object,
33
+ required: true,
34
+ },
35
+ },
36
+
37
+ data() {
38
+ return {
39
+ form: null,
40
+ model: null,
41
+ method: "patch",
42
+ };
43
+ },
44
+
45
+ beforeMount() {
46
+ this.form = new Form(
47
+ { _method: "PATCH", ...this.resource.form.fields(this) },
48
+ {
49
+ resetOnSuccess: false,
50
+ },
51
+ );
52
+ },
53
+
54
+ async mounted() {
55
+ window.axios
56
+ .get(
57
+ `${this.resource.api.endpoint(this)}/${this.$route.params[this.resource.id]}`,
58
+ {
59
+ params: this.resource.api.params.show(this),
60
+ },
61
+ )
62
+ .then((res) => {
63
+ this.model = res.data.data;
64
+
65
+ // Set initial form data
66
+ Object.entries(this.resource.form.fields(this)).forEach(
67
+ ([key, value]) => {
68
+ this.form[key] = value;
69
+ },
70
+ );
71
+ });
72
+ },
73
+
74
+ methods: {
75
+ async submit() {
76
+ if (this.resource.form.submit) {
77
+ await this.resource.form.submit(this);
78
+ } else {
79
+ const hold = { ...this.form.data() };
80
+
81
+ try {
82
+ this.form.populate(this.resource.form.preparation(this));
83
+
84
+ let res = await this.form.post(
85
+ `${this.resource.api.endpoint(this)}/${this.model.id}`,
86
+ );
87
+
88
+ this.$router.replace({
89
+ name: `${this.resource.routeName}.show`,
90
+ params: { [this.resource.id]: res.data.id },
91
+ });
92
+ } catch (e) {
93
+ console.log(e);
94
+ } finally {
95
+ if (
96
+ !this.form.successful ||
97
+ !this.form.__options.resetOnSuccess
98
+ ) {
99
+ this.form.populate(hold);
100
+ }
101
+ }
102
+ }
103
+ },
104
+ },
105
+ };
106
+ </script>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
3
+ <div class="grid__1/1">
4
+ <div class="flex gap items-center justify-end">
5
+ <template
6
+ v-for="(render, index) in resource.index.actions"
7
+ :key="index"
8
+ >
9
+ <component :is="render(this)" />
10
+ </template>
11
+ </div>
12
+
13
+ <template
14
+ v-for="(render, index) in resource.index.layout"
15
+ :key="index"
16
+ >
17
+ <component :is="render(this)" />
18
+ </template>
19
+ </div>
20
+ </div>
21
+ </template>
22
+
23
+ <script>
24
+ export default {
25
+ provide() {
26
+ return {
27
+ additionalInfo: { resource: this.resource },
28
+ };
29
+ },
30
+
31
+ props: {
32
+ resource: {
33
+ type: Object,
34
+ required: true,
35
+ },
36
+ depth: {
37
+ type: Number,
38
+ required: true,
39
+ },
40
+ },
41
+ };
42
+ </script>
@@ -0,0 +1,61 @@
1
+ <!-- eslint-disable vue/no-mutating-props -->
2
+ <template>
3
+ <form @submit.prevent="submit">
4
+ <template
5
+ v-for="(item, index) in resource.form.structure(this)"
6
+ :key="index"
7
+ >
8
+ <component
9
+ :is="item.render ? item.render(this) : 'VelBasic'"
10
+ v-model="form[item.key]"
11
+ :type="item.type || 'text'"
12
+ :error="form.errors"
13
+ :name="item.key"
14
+ :placeholder="
15
+ item.placeholder ||
16
+ item.label ||
17
+ item.key[0].toUpperCase() + item.key.slice(1)
18
+ "
19
+ :label="
20
+ item.label || item.key[0].toUpperCase() + item.key.slice(1)
21
+ "
22
+ v-bind="item"
23
+ />
24
+ </template>
25
+
26
+ <VelFormFooter :loading="form.processing" />
27
+ </form>
28
+ </template>
29
+
30
+ <script>
31
+ export default {
32
+ components: {
33
+ VelFormFooter: require("../../../../components/layout/FormFooter.vue")
34
+ .default,
35
+ VelBasic: require("../../../../components/form/basic.vue").default,
36
+ },
37
+
38
+ props: {
39
+ form: {
40
+ required: true,
41
+ type: Object,
42
+ },
43
+ submit: {
44
+ required: true,
45
+ type: Function,
46
+ },
47
+ method: {
48
+ type: String,
49
+ default: "post",
50
+ },
51
+ resource: {
52
+ required: true,
53
+ type: Object,
54
+ },
55
+ model: {
56
+ type: Object,
57
+ default: null,
58
+ },
59
+ },
60
+ };
61
+ </script>
@@ -0,0 +1,144 @@
1
+ <template>
2
+ <!-- Render nested router view if this isn't the deepest route -->
3
+ <router-view v-if="!deepestRoute" v-slot="{ Component }">
4
+ <component :is="Component" :depth="depth + 1" />
5
+ </router-view>
6
+
7
+ <template v-else>
8
+ <div class="container px-6 tablet:px-4 mobile:px-2 mb-8 ml-0 mr-0">
9
+ <div class="grid__1/1">
10
+ <template v-if="model">
11
+ <div class="bg-0 p-3 box-shadow-1 border-r-4 mb-6">
12
+ <VelPageHeader
13
+ :icon="resource.icon"
14
+ :title="
15
+ resource.modelTitle
16
+ ? resource.modelTitle(this)
17
+ : `${model.name ?? model.id} ${model.last_name ?? ''}`
18
+ "
19
+ >
20
+ <template
21
+ v-for="(rendered, index) in renderedActions"
22
+ :key="index"
23
+ >
24
+ <component :is="rendered" />
25
+ </template>
26
+ </VelPageHeader>
27
+
28
+ <hr class="my-3 hr-muted" />
29
+
30
+ <el-tabs v-model="active" type="card">
31
+ <template
32
+ v-for="(rendered, index) in renderedTabs"
33
+ :key="index"
34
+ >
35
+ <el-tab-pane :name="index">
36
+ <template #label>
37
+ <span class="align-middle-dive">
38
+ <GIcon
39
+ v-if="rendered.icon"
40
+ class="icon icon--text mr"
41
+ :name="rendered.icon"
42
+ />
43
+ <span>{{
44
+ rendered.label ||
45
+ `Tab ${index + 1}`
46
+ }}</span>
47
+ </span>
48
+ </template>
49
+ <component
50
+ :is="rendered.component || rendered"
51
+ />
52
+ </el-tab-pane>
53
+ </template>
54
+ </el-tabs>
55
+ </div>
56
+ </template>
57
+ <div v-else class="absolute transform-center text-center">
58
+ <VelSpinner />
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </template>
63
+ </template>
64
+
65
+ <script>
66
+ import axios from "axios";
67
+ import VelSpinner from "../../../components/form/Spinner.vue";
68
+ import VelButton from "../../../components/basic/Button.vue";
69
+ import { ElTabs, ElTabPane } from "element-plus";
70
+
71
+ export default {
72
+ components: {
73
+ VelPageHeader: require("../../../components/layout/PageHeader.vue")
74
+ .default,
75
+ VelSpinner,
76
+ VelButton,
77
+ ElTabs,
78
+ ElTabPane,
79
+ },
80
+
81
+ props: {
82
+ breadcrumbs: {
83
+ type: Array,
84
+ required: true,
85
+ },
86
+ resource: {
87
+ type: Object,
88
+ required: true,
89
+ },
90
+ depth: {
91
+ type: Number,
92
+ required: true,
93
+ },
94
+ },
95
+
96
+ data() {
97
+ return {
98
+ model: null,
99
+ active: 0,
100
+ };
101
+ },
102
+
103
+ computed: {
104
+ // This boolean helps determine if we are the final depth of route being rendered
105
+ deepestRoute() {
106
+ return (
107
+ this.depth ===
108
+ this.$route.matched.filter((d) => d.components).length
109
+ );
110
+ },
111
+
112
+ // Compute rendered layout once
113
+ renderedTabs() {
114
+ return this.resource.show.tabs
115
+ .map((render) => render(this))
116
+ .filter((d) => d);
117
+ },
118
+
119
+ // Compute rendered actions once
120
+ renderedActions() {
121
+ return this.resource.show.actions
122
+ .map((render) => render(this))
123
+ .filter((d) => d);
124
+ },
125
+ },
126
+
127
+ mounted() {
128
+ if (!this.deepestRoute) {
129
+ return;
130
+ }
131
+
132
+ axios
133
+ .get(
134
+ `${this.resource.api.endpoint(this)}/${this.$route.params[`${this.resource.id}`]}`,
135
+ {
136
+ params: this.resource.api.params.show(this),
137
+ },
138
+ )
139
+ .then((res) => {
140
+ this.model = res.data.data;
141
+ });
142
+ },
143
+ };
144
+ </script>