@hostlink/nuxt-light 0.0.91 → 0.0.92

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.
package/dist/module.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "light",
3
3
  "configKey": "light",
4
- "version": "0.0.91"
4
+ "version": "0.0.92"
5
5
  }
package/dist/module.mjs CHANGED
@@ -45,7 +45,6 @@ const module = defineNuxtModule({
45
45
  { name: "getObject", from },
46
46
  { name: "loadObject", from },
47
47
  { name: "list", from },
48
- { name: "listData", from },
49
48
  { name: "m", from },
50
49
  { name: "q", from },
51
50
  { name: "removeObject", from },
@@ -1,15 +1,22 @@
1
1
  <script setup>
2
- import { useLight } from "#imports";
2
+ import { useLight, watch } from "#imports";
3
3
  import { useRuntimeConfig } from 'nuxt/app'
4
4
  import { setApiUrl } from '@hostlink/light'
5
5
  import { Dialog } from 'quasar'
6
6
  import { q } from '../'
7
+ import { useRoute } from "#vue-router";
7
8
  const config = useRuntimeConfig();
8
9
  setApiUrl(config?.public?.apiBase ?? '/api/');
9
10
 
11
+ const route = useRoute();
12
+ const light = useLight()
13
+
14
+ light.setCurrentRoute(route);
15
+ watch(route, (to, from) => {
16
+ light.setCurrentRoute(to);
17
+ });
10
18
 
11
19
  let app = null
12
- const light = useLight()
13
20
  try {
14
21
  app = (await q({ app: ['company', 'companyLogo', 'logged', 'twoFactorAuthentication', 'googleClientId'] })).app;
15
22
  light.setCompany(app.company);
@@ -1,5 +1,4 @@
1
1
  <script setup>
2
- import { inject } from 'vue'
3
2
  const props = defineProps({
4
3
  label: {
5
4
  type: String,
@@ -1,5 +1,4 @@
1
1
  <script setup>
2
- import { useRouter } from "vue-router"
3
2
  const props = defineProps({
4
3
  to: {
5
4
  type: String,
@@ -11,15 +10,9 @@ const props = defineProps({
11
10
  default: "primary"
12
11
  },
13
12
  })
14
- const router = useRouter();
15
- const navigate = () => {
16
- if (props.to) {
17
- router.push(props.to);
18
- }
19
- }
20
13
  </script>
21
14
  <template>
22
- <a class="cursor-pointer" @click="navigate" style="text-decoration: underline; color:var(--q-primary)">
15
+ <router-link :to="props.to" style="text-decoration: underline; color:var(--q-primary)">
23
16
  <slot />
24
- </a>
17
+ </router-link>
25
18
  </template>
@@ -1,7 +1,5 @@
1
1
  <script setup>
2
2
 
3
-
4
-
5
3
  const props = defineProps({
6
4
  modelValue: {
7
5
  type: Object
@@ -11,11 +9,29 @@ const props = defineProps({
11
9
  }
12
10
  })
13
11
 
12
+ function getTo(field) {
13
+
14
+ const raw=field.getRaw();
15
+
16
+ if (raw.to) {
17
+ if (raw.to instanceof Function) {
18
+ return raw.to(props.modelValue);
19
+ }
20
+
21
+ if (typeof raw.to == 'string') {
22
+ return raw.to;
23
+ }
24
+ }
25
+
26
+ return null;
27
+ }
28
+
29
+
14
30
  </script>
15
31
  <template>
16
32
  <q-list bordered separator>
17
33
  <template v-if="fields">
18
- <l-item v-for="field in fields" :label="field.getRaw().label">
34
+ <l-item v-for="field in fields" :label="field.getRaw().label" :to="getTo(field)">
19
35
  {{ field.getFormattedValue(props.modelValue) }}
20
36
  </l-item>
21
37
 
@@ -1,8 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { useQuasar, QTable } from 'quasar';
3
- import { ref, computed, onMounted, useSlots, reactive, useAttrs } from "vue";
4
- import { t, deleteObject, q, f, useLight, GQLFieldBuilder } from '../';
5
- import { toQuery } from '@hostlink/light'
3
+ import { ref, computed, onMounted, useSlots, useAttrs } from "vue";
4
+ import { t, deleteObject, q, useLight, GQLFieldBuilder } from '../';
6
5
 
7
6
  const errors = ref<InstanceType<any>>([]);
8
7
 
@@ -408,7 +407,18 @@ const attrs = {
408
407
  }
409
408
 
410
409
  const filter = ref('');
410
+
411
+ const toColumns = props.columns?.filter((col: any) => {
412
+ return col.to;
413
+ }).map((col: any) => {
414
+ col.slot_name = 'body-cell-' + col.name;
415
+ return col;
416
+
417
+ })
418
+
419
+ console.log(ss);
411
420
  </script>
421
+
412
422
  <template>
413
423
  <template v-if="errors.length > 0">
414
424
  <div class="q-gutter-sm">
@@ -417,7 +427,8 @@ const filter = ref('');
417
427
  </template>
418
428
 
419
429
  <template v-if="debug">
420
- <pre>primaryKey:{{ primaryKey }}
430
+ <pre>
431
+ primaryKey:{{ primaryKey }}
421
432
  modelName:{{ modelName }}
422
433
  filters:{{ filters }}
423
434
  pagination:{{ pagination }}
@@ -430,6 +441,7 @@ const filter = ref('');
430
441
  rows:{{ props.rows }}
431
442
  </template>
432
443
 
444
+
433
445
  <q-table v-bind="attrs" :row-key="rowKey" :loading="loading" :rows="rows" ref="table" @request="onRequest"
434
446
  :rows-per-page-label="$t(props.rowsPerPageLabel)" :columns="renderColumns"
435
447
  :rows-per-page-options="rowsPerPageOptions" :selection="selection" v-model:pagination="pagination" :filter="filter">
@@ -443,15 +455,19 @@ const filter = ref('');
443
455
 
444
456
  <q-btn v-if="fullscreen" flat round dense :icon="props.inFullscreen ? 'fullscreen_exit' : 'fullscreen'"
445
457
  @click="props.toggleFullscreen" class="q-ml-md" />
446
-
447
-
448
458
  </template>
449
459
 
450
-
451
460
  <template v-for="s in ss" v-slot:[s]="props">
452
461
  <slot :name="s" v-bind="props"></slot>
453
462
  </template>
454
463
 
464
+ <template v-for="col in toColumns" v-slot:[col.slot_name]="props">
465
+ <q-td :props="props">
466
+ <l-link :to="col.to(props.row)">
467
+ {{ col.field(props.row) }}
468
+ </l-link>
469
+ </q-td>
470
+ </template>
455
471
 
456
472
  <template #body-cell-_actions="props">
457
473
  <q-td :props="props" auto-width>
@@ -9,6 +9,8 @@ interface Light {
9
9
  setCompany(company: string): void;
10
10
  getCompanyLogo(): string;
11
11
  setCompanyLogo(logo: string): void;
12
+ setCurrentRoute(to: any, from: any): void;
13
+ getID(): Number | null;
12
14
  }
13
15
  export declare const useLight: () => Light;
14
16
  export * from "./lib";
@@ -5,6 +5,7 @@ const app = {
5
5
  company: "",
6
6
  companyLogo: ""
7
7
  };
8
+ let currentRoute = null;
8
9
  export const useLight = () => {
9
10
  return {
10
11
  setCompany: (company) => {
@@ -42,6 +43,19 @@ export const useLight = () => {
42
43
  },
43
44
  setStyles(s) {
44
45
  styles = s;
46
+ },
47
+ setCurrentRoute(to, from) {
48
+ currentRoute = to;
49
+ },
50
+ getID() {
51
+ if (currentRoute == null)
52
+ return null;
53
+ let name = currentRoute.name?.toString();
54
+ if (name == void 0)
55
+ return 0;
56
+ let parts = name.split("-");
57
+ const keyname = parts[1];
58
+ return parseInt(currentRoute.params[keyname]);
45
59
  }
46
60
  };
47
61
  };
@@ -1,8 +1,12 @@
1
1
  import GQLFieldBuilder from "./GQLFieldBuilder.mjs";
2
+ import { getModelField } from "@hostlink/light";
2
3
  export default (name, fields) => {
3
4
  const builder = GQLFieldBuilder();
4
5
  fields.forEach((field) => {
5
- builder.add(getObjectField(name, field).getGQLField());
6
+ const modelField = getModelField(name, field);
7
+ if (modelField) {
8
+ builder.add(modelField.getGQLField());
9
+ }
6
10
  });
7
11
  return builder.get();
8
12
  };
@@ -1,2 +1,2 @@
1
- declare const _default: () => Number;
1
+ declare const _default: () => Number | null;
2
2
  export default _default;
@@ -1,12 +1,4 @@
1
- import { useRoute } from "vue-router";
2
- const route = useRoute();
1
+ import { useLight } from "../index.mjs";
3
2
  export default () => {
4
- let name = route.name?.toString();
5
- if (name == void 0)
6
- return 0;
7
- let parts = name.split("-");
8
- const module = parts[0];
9
- const moduleLower = module.charAt(0).toLowerCase() + module.slice(1);
10
- const keyname = parts[1];
11
- return parseInt(route.params[keyname]);
3
+ return useLight().getID();
12
4
  };
@@ -4,7 +4,6 @@ import getApiUrl from "./getApiUrl";
4
4
  import getCurrentUser from "./getCurrentUser";
5
5
  import getObject from "./getObject";
6
6
  import list from "./list";
7
- import listData from "./listData";
8
7
  import m from "./m";
9
8
  import q from "./q";
10
9
  import removeObject from "./removeObject";
@@ -22,4 +21,4 @@ declare const notify: (message: string, color?: string) => void;
22
21
  import getID from "./getID";
23
22
  declare const getApiBase: () => {};
24
23
  import { getGQLFields } from '@hostlink/light';
25
- export { addObject, f, getApiUrl, getCurrentUser, getObject, list, listData, m, q, removeObject, t, updateObject, notify, getID, deleteObject, listObject, isGranted, getApiBase, loadObject, GQLFieldBuilder, getModelField, getModelFields, getModelColumns, getGQLFields };
24
+ export { addObject, f, getApiUrl, getCurrentUser, getObject, list, m, q, removeObject, t, updateObject, notify, getID, deleteObject, listObject, isGranted, getApiBase, loadObject, GQLFieldBuilder, getModelField, getModelFields, getModelColumns, getGQLFields };
@@ -6,7 +6,6 @@ import getApiUrl from "./getApiUrl.mjs";
6
6
  import getCurrentUser from "./getCurrentUser.mjs";
7
7
  import getObject from "./getObject.mjs";
8
8
  import list from "./list.mjs";
9
- import listData from "./listData.mjs";
10
9
  import m from "./m.mjs";
11
10
  import q from "./q.mjs";
12
11
  import removeObject from "./removeObject.mjs";
@@ -40,7 +39,6 @@ export {
40
39
  getCurrentUser,
41
40
  getObject,
42
41
  list,
43
- listData,
44
42
  m,
45
43
  q,
46
44
  removeObject,
@@ -1 +1,7 @@
1
- export default function list(name: string, props?: any, fields?: Array<string>): Promise<any>;
1
+ import { Fields } from "@hostlink/light";
2
+ export default function list(name: string, props?: {
3
+ sort?: string;
4
+ filters?: object;
5
+ offset?: number;
6
+ limit?: number;
7
+ } | null, fields?: Fields): Promise<any>;
@@ -1,35 +1,38 @@
1
- import q from "./q.mjs";
2
- import f from "./f.mjs";
3
- export default async function list(name, props = {}, fields = []) {
4
- let v = {};
5
- if (props.sort) {
6
- v.sort = props.sort;
1
+ import { query, toQuery } from "@hostlink/light";
2
+ export default async function list(name, props = null, fields = []) {
3
+ let q = {};
4
+ if (props) {
5
+ if (props.sort) {
6
+ q.__args = q.__args || {};
7
+ q.__args.sort = props.sort;
8
+ }
9
+ if (props.filters) {
10
+ q.__args = q.__args || {};
11
+ q.__args.filters = props.filters;
12
+ }
7
13
  }
8
- if (props.filters) {
9
- v.filters = {
10
- value: props.filters,
11
- type: "mixed"
12
- };
14
+ q.data = {};
15
+ if (props) {
16
+ if (props.offset) {
17
+ q.data.__args = q.data.__args || {};
18
+ q.data.__args.offset = props.offset;
19
+ }
20
+ if (props.limit) {
21
+ q.data.__args = q.data.__args || {};
22
+ q.data.__args.limit = props.limit;
23
+ }
13
24
  }
14
- let offset_limit = {};
15
- if (props.offset) {
16
- offset_limit.offset = props.offset;
17
- }
18
- if (props.limit) {
19
- offset_limit.limit = props.limit;
20
- }
21
- const fs = fields;
22
- if (props.fields) {
23
- fs.push(...props.fields);
24
- }
25
- let data = await q(`list${name}`, v, [f("data", offset_limit, fs), f("meta", ["total", "key", "name"])]);
26
- if (props.done) {
27
- props.done({
28
- rows: data.data,
29
- total: data.meta.total,
30
- key: data.meta.key,
31
- name: data.meta.name
32
- });
33
- }
34
- return data.data;
25
+ q.data = {
26
+ ...q.data,
27
+ ...toQuery(fields)
28
+ };
29
+ q.meta = {
30
+ total: true,
31
+ key: true,
32
+ name: true
33
+ };
34
+ const resp = await query({
35
+ [`list${name}`]: q
36
+ });
37
+ return resp[`list${name}`];
35
38
  }
@@ -1 +1,2 @@
1
- export default function listObject(name: string, filters: {} | undefined, sort: String, offset: number, limit: number, fields?: Array<string>): Promise<any>;
1
+ import { Fields } from "@hostlink/light";
2
+ export default function listObject(name: string, filters: {} | undefined, sort: string, offset: number, limit: number, fields?: Fields): Promise<any>;
@@ -1,19 +1,10 @@
1
- import q from "./q.mjs";
2
- import f from "./f.mjs";
1
+ import list from "./list.mjs";
3
2
  export default async function listObject(name, filters = {}, sort, offset, limit, fields = []) {
4
- let offset_limit = {};
5
- if (offset) {
6
- offset_limit.offset = offset;
7
- }
8
- if (limit) {
9
- offset_limit.limit = limit;
10
- }
11
- let params = {};
12
- if (sort) {
13
- params.sort = sort;
14
- }
15
- if (filters) {
16
- params.filters = filters;
17
- }
18
- return await q(`list${name}`, params, [f("data", offset_limit, fields), f("meta", ["total", "key", "name"])]);
3
+ const resp = await list(name, {
4
+ filters,
5
+ sort,
6
+ offset,
7
+ limit
8
+ }, fields);
9
+ return resp.data;
19
10
  }
@@ -1,6 +1,6 @@
1
- import listData from "./listData.mjs";
1
+ import list from "./list.mjs";
2
2
  export default async function(module, filters, fields = []) {
3
- let { data } = await listData(module, {
3
+ let { data } = await list(module, {
4
4
  filters
5
5
  }, fields);
6
6
  if (data.length > 0) {
@@ -31,10 +31,10 @@ const onSave = async () => {
31
31
 
32
32
  <l-input label="Permission name" v-model="obj.value" required></l-input>
33
33
 
34
- <q-field label="Roles" stack-label>
34
+ <l-field label="Roles" stack-label>
35
35
  <q-option-group type="checkbox" :options="roles" v-model="obj.roles" inline>
36
36
  </q-option-group>
37
- </q-field>
37
+ </l-field>
38
38
 
39
39
  </l-form>
40
40
 
@@ -62,10 +62,10 @@ const submit = () => {
62
62
  <template>
63
63
  <l-page>
64
64
  <l-form submit-label="Export" submit-icon="sym_o_download" @submit="submit">
65
- <q-field label="Roles" stack-label>
65
+ <l-field label="Roles" stack-label>
66
66
  <q-option-group type="checkbox" :options="roles" v-model="obj.roles" inline>
67
67
  </q-option-group>
68
- </q-field>
68
+ </l-field>
69
69
  </l-form>
70
70
 
71
71
 
@@ -2,11 +2,7 @@
2
2
  import { list, m } from '../../'
3
3
  import { useRouter } from "vue-router"
4
4
 
5
- let users = await list("User", {
6
- fields: [
7
- "user_id", "username", "name", "roles"
8
- ]
9
- });
5
+ let { data: users } = await list("User", null, ["user_id", "username", "name", "roles"]);
10
6
 
11
7
  let columns = [
12
8
  {
@@ -44,7 +40,6 @@ const onCickView = async (id) => {
44
40
  </script>
45
41
  <template>
46
42
  <l-page>
47
-
48
43
  <q-table flat :columns="columns" :rows="users">
49
44
  <template #body-cell-view="props">
50
45
  <q-td :props="props">
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { ref, computed, inject, reactive } from 'vue';
2
+ import { ref, reactive } from 'vue';
3
3
  import { m, q } from '../../'
4
4
  import { Notify } from 'quasar';
5
5
  const app = await q("app", ["languages"])
@@ -4,7 +4,7 @@ import getModelColumns from "../../lib/getModelColumns";
4
4
  const onRequest = async (request) => {
5
5
  request.loadObjects("User", { status: status.value });
6
6
  };
7
- const columns = getModelColumns("User", ["username", "first_name", "label_name", "email", "phone", "join_date", "status"]);
7
+ const columns = getModelColumns("User", [ "username", "first_name", "label_name", "email", "phone", "join_date", "status"]);
8
8
  const status = ref("0");
9
9
  </script>
10
10
 
@@ -40,4 +40,12 @@ export default {
40
40
  return ["Active", "Inactive"][value];
41
41
  }
42
42
  }
43
+ /* ,
44
+ test: {
45
+ label: "Test",
46
+ name: "_test",
47
+ to: (row: any) => `/User/${row.user_id}/view`,
48
+ gqlField: ["user_id", "first_name"],
49
+ field: (row: any) => row.first_name,
50
+ } */
43
51
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostlink/nuxt-light",
3
- "version": "0.0.91",
3
+ "version": "0.0.92",
4
4
  "description": "HostLink Nuxt Light Framework",
5
5
  "repository": "@hostlink/nuxt-light",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- export default function listData(name: string, props?: any, fields?: Array<string | Object> | Object): Promise<any>;
@@ -1,33 +0,0 @@
1
- import { query, toQuery } from "@hostlink/light";
2
- export default async function listData(name, props = {}, fields = []) {
3
- let json = {};
4
- if (props.sort) {
5
- json.__args = json.__args || {};
6
- json.__args.sort = props.sort;
7
- }
8
- if (props.filters) {
9
- json.__args = json.__args || {};
10
- json.__args.filters = props.filters;
11
- }
12
- json.data = {};
13
- if (props.offset) {
14
- json.data.__args = json.data.__args || {};
15
- json.data.__args.offset = props.offset;
16
- }
17
- if (props.limit) {
18
- json.data.__args = json.data.__args || {};
19
- json.data.__args.limit = props.limit;
20
- }
21
- Object.entries(toQuery(fields)).forEach(([key, value]) => {
22
- json.data[key] = value;
23
- });
24
- json.meta = {
25
- total: true,
26
- key: true,
27
- name: true
28
- };
29
- const q = {};
30
- q[`list${name}`] = json;
31
- let data = await query(q);
32
- return data[`list${name}`];
33
- }