Browse Source

Add id creation in pages

pull/3411/head
Artur Arseniev 5 years ago
parent
commit
27f218f3fc
  1. 26
      src/pages/index.js
  2. 12
      src/utils/mixins.js

26
src/pages/index.js

@ -1,4 +1,5 @@
import { isString } from 'underscore';
import { createId } from 'utils/mixins';
import Pages from './model/Pages';
import Page from './model/Page';
@ -24,7 +25,8 @@ export default () => {
const defPages = cnf.pages || [];
const pages = new Pages(defPages);
this.pages = pages;
!pages.length && this.add({ type: 'main' });
const mainPage = !pages.length ? this.add({ type: 'main' }) : pages.at(0);
this.select(mainPage);
pages.on('add', (p, c, o) => em.trigger(`${evPfx}add`, p, o));
pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o));
this.em = em;
@ -70,15 +72,23 @@ export default () => {
return this.pages;
},
getAllMap() {
return this.getAll().reduce((acc, i) => {
acc[i.get('id')] = i;
return acc;
}, {});
},
/**
* Select page
* @param {String|Page} page Page or page id
* @returns {this}
*/
select(pg) {
const { em } = this;
const page = isString(pg) ? this.get(pg) : pg;
this.selected = page;
this.em.trigger(`${evPfx}:select`, page);
em && em.trigger(`${evPfx}:select`, page);
return this;
},
@ -98,9 +108,17 @@ export default () => {
['selected', 'config', 'em', 'pages'].map(i => (this[i] = 0));
},
// TODO
_createId() {
return Math.random();
const pages = this.getAll();
const len = pages.length + 16;
const pagesMap = this.getAllMap();
let id;
do {
id = createId(len);
} while (pagesMap[id]);
return id;
}
};
};

12
src/utils/mixins.js

@ -223,6 +223,17 @@ const setViewEl = (el, view) => {
el.__gjsv = view;
};
const createId = (length = 16) => {
let result = '';
const chars =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const len = chars.length;
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * len));
}
return result;
};
export {
on,
off,
@ -248,5 +259,6 @@ export {
isObject,
isEmptyObj,
isComponent,
createId,
isRule
};

Loading…
Cancel
Save