Browse Source

Add id creation in pages

pull/3411/head
Artur Arseniev 6 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 { isString } from 'underscore';
import { createId } from 'utils/mixins';
import Pages from './model/Pages'; import Pages from './model/Pages';
import Page from './model/Page'; import Page from './model/Page';
@ -24,7 +25,8 @@ export default () => {
const defPages = cnf.pages || []; const defPages = cnf.pages || [];
const pages = new Pages(defPages); const pages = new Pages(defPages);
this.pages = pages; 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('add', (p, c, o) => em.trigger(`${evPfx}add`, p, o));
pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o)); pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o));
this.em = em; this.em = em;
@ -70,15 +72,23 @@ export default () => {
return this.pages; return this.pages;
}, },
getAllMap() {
return this.getAll().reduce((acc, i) => {
acc[i.get('id')] = i;
return acc;
}, {});
},
/** /**
* Select page * Select page
* @param {String|Page} page Page or page id * @param {String|Page} page Page or page id
* @returns {this} * @returns {this}
*/ */
select(pg) { select(pg) {
const { em } = this;
const page = isString(pg) ? this.get(pg) : pg; const page = isString(pg) ? this.get(pg) : pg;
this.selected = page; this.selected = page;
this.em.trigger(`${evPfx}:select`, page); em && em.trigger(`${evPfx}:select`, page);
return this; return this;
}, },
@ -98,9 +108,17 @@ export default () => {
['selected', 'config', 'em', 'pages'].map(i => (this[i] = 0)); ['selected', 'config', 'em', 'pages'].map(i => (this[i] = 0));
}, },
// TODO
_createId() { _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; 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 { export {
on, on,
off, off,
@ -248,5 +259,6 @@ export {
isObject, isObject,
isEmptyObj, isEmptyObj,
isComponent, isComponent,
createId,
isRule isRule
}; };

Loading…
Cancel
Save