ywana-core8 0.0.293 → 0.0.294

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.293",
3
+ "version": "0.0.294",
4
4
  "description": "ywana-core8",
5
5
  "author": "Ernesto Roldan Garcia",
6
6
  "license": "MIT",
@@ -7,6 +7,7 @@ import { ContentEditor } from './ContentEditor'
7
7
  import { CHECK, Content } from './ContentType'
8
8
  import { ContentViewer } from './ContentViewer'
9
9
  import { CreateContentDialog } from './CreateContentDialog'
10
+ import { QUERY } from './squema'
10
11
  import "./TablePage.css"
11
12
 
12
13
  /**
@@ -58,6 +59,15 @@ export const TablePage = (props) => {
58
59
  site.openDialog(<CreateContentDialog label={`Crear ${name}`} type={schema} onOK={onOK} validator={validator} filter={formFilter} />);
59
60
  }
60
61
 
62
+ function saveQuery(filters) {
63
+ const onOK = async (form) => {
64
+ form.filters = filters
65
+ await pageContext.createQuery(form)
66
+ setPageContext(Object.assign({}, pageContext))
67
+ }
68
+ site.openDialog(<CreateContentDialog label="Nueva query" type={QUERY} onOK={onOK} />)
69
+ }
70
+
61
71
  function change(next) {
62
72
  setForm(next)
63
73
  }
@@ -125,7 +135,7 @@ export const TablePage = (props) => {
125
135
  {canQuery || canFilter ? (
126
136
  <menu className="table-page">
127
137
  {canQuery ? <TableQueries schema={schema} /> : null}
128
- {canFilter ? <TableFilters schema={schema} /> : null}
138
+ {canFilter ? <TableFilters schema={schema} onSave={saveQuery}/> : null}
129
139
  </menu>
130
140
  ) : null }
131
141
  <main key={id} className="table-page">
@@ -197,11 +207,24 @@ const TableSelector = (props) => {
197
207
  * Table Queries
198
208
  */
199
209
  const TableQueries = (props) => {
210
+
211
+ const [pageContext, setPageContext] = useContext(PageContext)
212
+
213
+ useEffect(() => {
214
+ await pageContext.loadQueries()
215
+ }, [])
216
+
217
+
218
+ const queries = [1,2,3 ]
200
219
  return (
201
220
  <Fragment>
202
221
  <Header className="table-queries" title={<Text>Queries</Text>} />
203
222
  <main className="table-queries">
204
- ...
223
+ {queries.map(query => (
224
+ <div className="table-queries-item">
225
+
226
+ </div>
227
+ ))}
205
228
  </main>
206
229
  </Fragment>
207
230
  )
@@ -213,7 +236,7 @@ const TableQueries = (props) => {
213
236
  const TableFilters = (props) => {
214
237
 
215
238
  const [pageContext, setPageContext] = useContext(PageContext)
216
- const { schema } = props
239
+ const { schema, onSave } = props
217
240
  const [form, setForm] = useState({})
218
241
 
219
242
  const filterSchema = useMemo(() => {
@@ -238,6 +261,10 @@ const TableFilters = (props) => {
238
261
  change({})
239
262
  }
240
263
 
264
+ function save() {
265
+ if (onSave) onSave(form)
266
+ }
267
+
241
268
  const content = new Content(filterSchema, form)
242
269
  return (
243
270
  <Fragment>
@@ -247,6 +274,9 @@ const TableFilters = (props) => {
247
274
  <main className="table-filters">
248
275
  <ContentEditor content={content} onChange={change} />
249
276
  </main>
277
+ <footer>
278
+ { canQuery ? <Button icon="playlist_add" label="CREAR BUSQUEDA" action={save} outlined/>}
279
+ </footer>
250
280
  </Fragment>
251
281
  )
252
282
  }
@@ -414,16 +444,15 @@ const TableContext = (url, field, host) => {
414
444
  checked: new Set([]),
415
445
  selected: null,
416
446
  filters: {},
447
+ queries: [],
417
448
 
418
449
  async load(filter) {
419
450
  try {
420
-
421
451
  const filters = filter ? Object.keys(filter).reduce((filters, key) => {
422
452
  const field = filter[key];
423
453
  if (field) filters[key] = field;
424
454
  return filters;
425
455
  }, {}) : []
426
-
427
456
  const data = await API.all(filters);
428
457
  this.all = field ? data[field] : data;
429
458
  } catch (error) {
@@ -481,7 +510,35 @@ const TableContext = (url, field, host) => {
481
510
 
482
511
  changeFilters(filters) {
483
512
  this.filters = filters
513
+ },
514
+
515
+ async loadQueries() {
516
+ try {
517
+ this.queries = await API.queries()
518
+ } catch (error) {
519
+ console.log(error)
520
+ }
521
+ },
522
+
523
+ async createQuery(query) {
524
+ try {
525
+ await API.createQuery(query)
526
+ this.loadQueries()
527
+ } catch (error) {
528
+ console.log(error)
529
+ }
530
+ },
531
+
532
+ async removeQuery(id) {
533
+ try {
534
+ await API.removeQuery(id)
535
+ await this.loadQueries()
536
+ } catch (error) {
537
+ console.log(error)
538
+ }
539
+ return
484
540
  }
541
+
485
542
  }
486
543
  }
487
544
 
@@ -531,6 +588,19 @@ const TableAPI = (url, host) => {
531
588
 
532
589
  remove(id) {
533
590
  return http.DELETE(`${url}/${id}`)
534
- }
591
+ },
592
+
593
+ queries() {
594
+ return http.GET(`${url}/queries`)
595
+ },
596
+
597
+ createQuery(form) {
598
+ const body = JSON.stringify(form)
599
+ return http.POST(`${url}/queries`, body)
600
+ },
601
+
602
+ removeQuery(id) {
603
+ return http.DELETE(`${url}/queries/${id}`)
604
+ },
535
605
  }
536
606
  }
@@ -0,0 +1,6 @@
1
+ import { TYPES } from "ywana-core8";
2
+
3
+ export const QUERY = {
4
+ id : { section: "Info", id: "id" , type: TYPES.STRING , editable: false },
5
+ name : { section: "Info", id: "name" , type: TYPES.STRING , required: true , label: "Name" },
6
+ }
@@ -4,6 +4,7 @@ import { Site } from './site'
4
4
  import { Page } from './page'
5
5
  import './site.css'
6
6
  import './page.css'
7
+ import { TablePage } from '../domain/TablePage'
7
8
 
8
9
  const SiteTest = (prop) => {
9
10
  return (
@@ -28,7 +29,8 @@ const Page1 = (props) => {
28
29
  return (
29
30
  <Fragment>
30
31
  <header>Page 1</header>
31
- <main></main>
32
+ <main>
33
+ </main>
32
34
  <footer>f1</footer>
33
35
  </Fragment>
34
36
  )