@esportsplus/ui 0.4.0 → 0.5.1

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.
@@ -2,12 +2,22 @@ import response from '@esportsplus/action';
2
2
  import input from './input';
3
3
  function parse(input) {
4
4
  let data = {};
5
- for (let path in input) {
6
- let bucket = data, keys = path.indexOf('.') !== -1 ? path.split('.') : [path];
7
- for (let i = 0; i < keys.length - 1; i++) {
8
- bucket = bucket[keys[i]] = bucket[keys[i]] || {};
5
+ for (let [path, value] of input) {
6
+ let bucket = data, segments = path.indexOf('.') !== -1 ? path.split('.') : [path];
7
+ for (let i = 0; i < segments.length - 1; i++) {
8
+ bucket = bucket[segments[i]] = bucket[segments[i]] || {};
9
+ }
10
+ let key = segments.at(-1);
11
+ if (path.endsWith('[]')) {
12
+ if (typeof value === 'string' && value.trim() === '') {
13
+ continue;
14
+ }
15
+ bucket = bucket[key.substring(0, key.length - 2)] ??= [];
16
+ bucket.push(value);
17
+ }
18
+ else {
19
+ bucket[key] = value;
9
20
  }
10
- bucket[keys[keys.length - 1]] = input[path];
11
21
  }
12
22
  return data;
13
23
  }
@@ -27,7 +37,7 @@ export default function (action) {
27
37
  event?.submitter?.classList.add('button--processing');
28
38
  let { errors } = await action({
29
39
  alert: null,
30
- input: parse(Object.fromEntries(new FormData(this)?.entries())),
40
+ input: parse(new FormData(this).entries()),
31
41
  response
32
42
  });
33
43
  for (let i = 0, n = errors.length; i < n; i++) {
package/normalize.css CHANGED
@@ -1 +1 @@
1
- /*! modern-normalize v3.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */*,::before,::after{box-sizing:border-box}html{font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";line-height:1.15;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{margin:0}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{border-color:currentcolor}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}
1
+ /*! modern-normalize v3.0.1 | MIT License | https://github.com/sindresorhus/modern-normalize */*,::before,::after{box-sizing:border-box}html{font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";line-height:1.15;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{margin:0}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{border-color:currentcolor}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}
package/package.json CHANGED
@@ -2,12 +2,12 @@
2
2
  "author": "ICJR",
3
3
  "dependencies": {
4
4
  "@esportsplus/action": "^0.0.50",
5
- "@esportsplus/reactivity": "^0.2.6",
6
- "@esportsplus/template": "^0.6.2"
5
+ "@esportsplus/reactivity": "^0.2.7",
6
+ "@esportsplus/template": "^0.6.5"
7
7
  },
8
8
  "devDependencies": {
9
- "@esportsplus/webpack": "^0.4.11",
10
- "modern-normalize": "^3.0.0"
9
+ "@esportsplus/webpack": "^0.4.13",
10
+ "modern-normalize": "^3.0.1"
11
11
  },
12
12
  "main": "build/index.js",
13
13
  "name": "@esportsplus/ui",
@@ -21,5 +21,5 @@
21
21
  },
22
22
  "sideEffects": false,
23
23
  "types": "build/index.d.ts",
24
- "version": "0.4.0"
24
+ "version": "0.5.1"
25
25
  }
@@ -4,18 +4,30 @@ import { Action } from './types';
4
4
  import input from './input';
5
5
 
6
6
 
7
- function parse(input: Record<string, any>) {
7
+ function parse(input: ReturnType<FormData['entries']>) {
8
8
  let data: Record<string, any> = {};
9
9
 
10
- for (let path in input) {
10
+ for (let [path, value] of input) {
11
11
  let bucket = data,
12
- keys = path.indexOf('.') !== -1 ? path.split('.') : [path];
12
+ segments = path.indexOf('.') !== -1 ? path.split('.') : [path];
13
13
 
14
- for (let i = 0; i < keys.length - 1; i++) {
15
- bucket = bucket[keys[i]] = bucket[keys[i]] || {};
14
+ for (let i = 0; i < segments.length - 1; i++) {
15
+ bucket = bucket[ segments[i] ] = bucket[ segments[i] ] || {};
16
16
  }
17
17
 
18
- bucket[ keys[keys.length - 1] ] = input[path];
18
+ let key = segments.at(-1)!;
19
+
20
+ if (path.endsWith('[]')) {
21
+ if (typeof value === 'string' && value.trim() === '') {
22
+ continue;
23
+ }
24
+
25
+ bucket = bucket[ key.substring(0, key.length - 2) ] ??= [];
26
+ bucket.push(value);
27
+ }
28
+ else {
29
+ bucket[key] = value;
30
+ }
19
31
  }
20
32
 
21
33
  return data;
@@ -39,7 +51,7 @@ export default function(action: Action) {
39
51
  );
40
52
  },
41
53
  onsubmit: async function(this: HTMLFormElement, event: SubmitEvent) {
42
- // TODO: Figure out processing
54
+ // TODO: Figure out button--processing
43
55
  // - Could pass reactive value above and tie it to form layout handler
44
56
  event.preventDefault();
45
57
  event?.submitter?.classList.add('button--processing');
@@ -47,7 +59,7 @@ export default function(action: Action) {
47
59
  let { errors } = await action({
48
60
  // @ts-ignore
49
61
  alert: null,
50
- input: parse( Object.fromEntries( new FormData( this )?.entries() ) ),
62
+ input: parse( new FormData( this ).entries() ),
51
63
  response
52
64
  });
53
65