ywana-core8 0.0.629 → 0.0.632

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ywana-core8",
3
- "version": "0.0.629",
3
+ "version": "0.0.632",
4
4
  "description": "ywana-core8",
5
5
  "homepage": "https://ywana.github.io/workspace",
6
6
  "author": "Ernesto Roldan Garcia",
@@ -9,6 +9,9 @@ menu.collection-page {
9
9
 
10
10
  menu.collection-page>header {
11
11
  border-bottom: dotted 1px var(--divider-color);
12
+ display: flex;
13
+ align-items: center;
14
+ padding: 0 0.5rem
12
15
  }
13
16
 
14
17
  menu.collection-page>nav.collection-filters {
@@ -2,7 +2,7 @@ import equal from 'deep-equal'
2
2
  import React, { Fragment, useContext, useEffect, useRef, useState, useMemo } from 'react'
3
3
  import { HTTPClient, Session } from '../http'
4
4
  import { PageContext } from '../site'
5
- import { Button, Header, Icon, List, Menu, MenuIcon, MenuItem, Text, Tree, TreeItem, TreeNode, TextField } from '../html'
5
+ import { Button, Header, Icon, List, Menu, MenuIcon, MenuItem, Text, Tree, TreeItem, TreeNode, TextField, Chip } from '../html'
6
6
  import { Content, TYPES } from './ContentType'
7
7
  import { ContentEditor, TabbedContentEditor, TreededContentEditor } from './ContentEditor'
8
8
  import { CreateContentDialog } from './CreateContentDialog'
@@ -30,7 +30,7 @@ export const CollectionPage = (props) => {
30
30
 
31
31
  const [pageContext, setPageContext] = useContext(PageContext)
32
32
  const context = CollectionContext(url, field, host, page, fetching)
33
- const [showFilter, setShowFilter] = useState(false)
33
+
34
34
  const { all } = pageContext
35
35
 
36
36
  useEffect(async () => {
@@ -38,9 +38,7 @@ export const CollectionPage = (props) => {
38
38
  setPageContext(context)
39
39
  }, [])
40
40
 
41
- function toggleFilters() {
42
- setShowFilter(!showFilter)
43
- }
41
+
44
42
 
45
43
  async function reload() {
46
44
  await pageContext.load()
@@ -79,14 +77,11 @@ export const CollectionPage = (props) => {
79
77
  {renderActions()}
80
78
  </Header>
81
79
  <menu className={`collection-page ${className}`}>
82
- <Header title={<Text>{name}</Text>} >
83
- {canFilter ? showFilter ? <Icon icon="filter_list" size="small" clickable action={toggleFilters} /> : <Icon icon="filter_list_off" size="small" clickable action={toggleFilters} /> : false}
84
- </Header>
85
- {canFilter && showFilter ? <CollectionFilters schema={schema} /> : null}
80
+ {canFilter ? <CollectionFilters schema={schema} /> : null}
86
81
  {levels ? <CollectionTree schema={schema} icon={icon} levels={levels} onSelect={onSelect} sorter={sorter} searchBy={searchBy} /> : <CollectionList groupBy={groupBy} onSelect={onSelect} searchBy={searchBy} />}
87
82
  </menu>
88
83
  <main key={id} className={`collection-page ${className}`}>
89
- <CollectionEditor icon={icon} schema={schema} layout={editor} autosave={autosave} delay={delay} canDelete={canDelete} canEdit={canEdit} onReload={reloadSelection} patch={patch}/>
84
+ <CollectionEditor icon={icon} schema={schema} layout={editor} autosave={autosave} delay={delay} canDelete={canDelete} canEdit={canEdit} onReload={reloadSelection} patch={patch} />
90
85
  {children ? <article>{children}</article> : null}
91
86
  <footer>
92
87
  {footer}
@@ -103,6 +98,7 @@ export const CollectionFilters = (props) => {
103
98
 
104
99
  const { schema, onChange } = props
105
100
  const [form, setForm] = useState({})
101
+ const [showFilter, setShowFilter] = useState(false)
106
102
 
107
103
  const filterSchema = useMemo(() => {
108
104
  const filterSchema = Object.assign({}, schema)
@@ -133,15 +129,29 @@ export const CollectionFilters = (props) => {
133
129
  change({})
134
130
  }
135
131
 
132
+ function toggleFilters() {
133
+ setShowFilter(!showFilter)
134
+ }
135
+
136
136
  const content = new Content(filterSchema, form)
137
137
  return (
138
138
  <Fragment>
139
- <nav className="collection-filters">
140
- <Icon icon="clear_all" size="small" clickable action={clear} />
141
- </nav>
142
- <main className="collection-filters">
143
- <ContentEditor content={content} onChange={change} />
144
- </main>
139
+ <header>
140
+ <div className='expand'>
141
+ <Chip label="Activas" />
142
+ </div>
143
+ {showFilter ? <Icon icon="expand_less" size="small" clickable action={toggleFilters} /> : <Icon icon="expand_more" size="small" clickable action={toggleFilters} />}
144
+ </header>
145
+ {showFilter ? (
146
+ <>
147
+ <nav className="collection-filters">
148
+ <Icon icon="clear_all" size="small" clickable action={clear} />
149
+ </nav>
150
+ <main className="collection-filters">
151
+ <ContentEditor content={content} onChange={change} />
152
+ </main>
153
+ </>
154
+ ) : null}
145
155
  </Fragment>
146
156
  )
147
157
  }
@@ -310,7 +320,7 @@ export const CollectionTree = (props) => {
310
320
  const CollectionEditor = (props) => {
311
321
  const [pageContext, setPageContext] = useContext(PageContext)
312
322
  const { selected } = pageContext
313
- const { icon, schema, layout, autosave = false, delay = 1000, canDelete, canEdit, onReload, patch=false } = props
323
+ const { icon, schema, layout, autosave = false, delay = 1000, canDelete, canEdit, onReload, patch = false } = props
314
324
  const timer = useRef(null)
315
325
  const [form, setForm] = useState(selected)
316
326
 
@@ -348,10 +358,10 @@ const CollectionEditor = (props) => {
348
358
  }
349
359
 
350
360
  async function save() {
351
- if (patch) { 
361
+ if (patch) {
352
362
  await pageContext.patch(form.id, form)
353
- } else {
354
- await pageContext.update(form)
363
+ } else {
364
+ await pageContext.update(form)
355
365
  }
356
366
  setPageContext(Object.assign({}, pageContext))
357
367
  }
@@ -412,34 +412,10 @@ export const CollectionEditor = ({ field, value = [], onChange, onReload }) => {
412
412
  }
413
413
  }
414
414
 
415
- function change(index, cellId, cellValue) {
416
- if (onChange) {
417
- const next = value.slice()
418
- next[index][cellId] = cellValue
419
- onChange(id, next)
420
- }
421
- }
422
-
423
415
  function reload() {
424
416
  if (onReload) onReload()
425
417
  }
426
418
 
427
- /* const columns = Object.values(item)
428
- .filter(field => field.column === true)
429
- .map((item) => ({ ...item, onChange: change }))
430
- columns.push({ id: 'actions', label: 'Actions' })
431
-
432
- const rows = value.map((item, index) => ({
433
- ...item,
434
- id: index,
435
- actions: [
436
- <Icon icon='delete' clickable action={() => remove(index)} size="small" />
437
- ]
438
- }))
439
-
440
- const table = { columns, rows }
441
- */
442
-
443
419
  return (
444
420
  <div className='collection-editor'>
445
421
  {
@@ -79,7 +79,7 @@ export class ContentType {
79
79
  const attributes = Object.entries(this._schema)
80
80
  return attributes
81
81
  .filter(([name, attr]) => attr.required === true)
82
- .every(([name, attr]) => data[name] !== undefined ? this.checkType(attr, data[name]) : false)
82
+ .every(([name, attr]) => data[name] && typeof(data[name]) !== undefined ? this.checkType(attr, data[name]) : false)
83
83
  }
84
84
 
85
85
  /**
@@ -123,42 +123,47 @@ export class ContentType {
123
123
  const fields = Object.entries(this._schema)
124
124
  const next = fields.reduce((next, [name, field]) => {
125
125
 
126
- const { type, item, optional } = field
126
+ const { type, item, optional, outsider } = field
127
127
  const entryData = data ? data[name] : null
128
128
 
129
- switch (type) {
129
+ if (outsider === true) {
130
+ // Dont send outsider data
131
+ } else {
130
132
 
131
- case TYPES.STRING:
132
- next[name] = entryData || field.default
133
- break;
133
+ switch (type) {
134
134
 
135
- case TYPES.NUMBER:
136
- next[name] = entryData || field.default
137
- break;
135
+ case TYPES.STRING:
136
+ next[name] = entryData || field.default
137
+ break;
138
138
 
139
- case TYPES.BOOLEAN:
140
- next[name] = entryData || field.default
141
- break
139
+ case TYPES.NUMBER:
140
+ next[name] = entryData || field.default
141
+ break;
142
142
 
143
- case TYPES.ENTITY:
144
- if (optional === true && !entryData) break;
145
- const child1 = new ContentType(item)
146
- next[name] = child1.value(entryData)
147
- break;
143
+ case TYPES.BOOLEAN:
144
+ next[name] = entryData || field.default
145
+ break
148
146
 
149
- case TYPES.ARRAY:
150
- if (item === TYPES.STRING) {
151
- next[name] = entryData ? entryData : []
152
- } else {
153
- const child2 = new ContentType(item)
154
- next[name] = entryData ? entryData.map(data2 => child2.value(data2)) : []
155
- }
156
- break;
147
+ case TYPES.ENTITY:
148
+ if (optional === true && !entryData) break;
149
+ const child1 = new ContentType(item)
150
+ next[name] = child1.value(entryData)
151
+ break;
157
152
 
158
- default:
159
- next[name] = field
160
- break;
153
+ case TYPES.ARRAY:
154
+ if (item === TYPES.STRING) {
155
+ next[name] = entryData ? entryData : []
156
+ } else {
157
+ const child2 = new ContentType(item)
158
+ next[name] = entryData ? entryData.map(data2 => child2.value(data2)) : []
159
+ }
160
+ break;
161
+
162
+ default:
163
+ next[name] = field
164
+ break;
161
165
 
166
+ }
162
167
  }
163
168
 
164
169
  return next
@@ -20,7 +20,7 @@ const SiteTest = (prop) => {
20
20
  const footer = <div>FOOTER</div>
21
21
 
22
22
  return (
23
- <Site icon="star" title="Site Test" init={"PAGE3"} footer={footer}>
23
+ <Site icon="star" title="Site Test" init={"PAGE5"} footer={footer}>
24
24
  <Page id="PAGE1" section="SECTION1" icon="description" title="Page 1" layout="workspace">
25
25
  <Page1 />
26
26
  </Page>
@@ -201,7 +201,7 @@ const Page5 = (props) => {
201
201
  const schema = {
202
202
  field6: { id: "field6", section: "C", type: TYPES.ARRAY , item: ENTITYTYPE , filter: false , label: "Collection 100"},
203
203
  name : { id: "name" , section: "A", type: TYPES.STRING , format: FORMATS.NONE , required: true, tab: false, grouper: true , column: true , filter: true , like: true, label: "Name" },
204
- state : { id: "state" , section: "A", type: TYPES.STRING , format: FORMATS.NONE , required: true, tab: true , grouper: true , column: true , filter: false , label: "State" , options: [
204
+ state : { id: "state" , section: "A", type: TYPES.STRING , format: FORMATS.NONE , required: true, tab: true , grouper: true , column: true , filter: true , label: "State" , options: [
205
205
  { label: "Pendiente", value: "NOT_CLASSIFIED" },
206
206
  { label: "Clasificada", value: "CLASSIFIED"},
207
207
  ]},
@@ -217,9 +217,9 @@ const Page5 = (props) => {
217
217
  <CollectionPage
218
218
  title="Referencias"
219
219
  schema={schema} host="http://localhost:3000" url="/references" fetching={true} // resource
220
- searchBy={["field1"]} levels={["color"]} canFilter={true} // menu
220
+ searchBy={["name"]} levels={["color"]} canFilter={true} // menu
221
221
  editor="TABBED" canAdd={true} // editor
222
222
  />
223
223
  </Fragment>
224
224
  )
225
- }
225
+ }