mirror of
https://github.com/FJurmanovic/wallet-web.git
synced 2026-02-06 14:18:08 +00:00
added form validators
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@github/catalyst": "^1.1.3",
|
"@github/catalyst": "^1.1.3",
|
||||||
"lit-html": "^1.4.1",
|
"core/utils": "^1.4.1",
|
||||||
"validator": "^13.6.0"
|
"validator": "^13.6.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { html, render, TemplateResult } from 'lit-html';
|
import { html, render, TemplateResult } from 'core/utils';
|
||||||
import { AppLoaderElement, AppMainElement, AppModalElement, AppRootElement } from 'components/';
|
import { AppLoaderElement, AppMainElement, AppModalElement, AppRootElement } from 'components/';
|
||||||
import { AppService, RouterService } from 'core/services';
|
import { AppService, RouterService } from 'core/services';
|
||||||
import { AuthStore } from 'core/store';
|
import { AuthStore } from 'core/store';
|
||||||
@@ -71,7 +71,7 @@ class BaseElement extends HTMLElement {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
render = (): TemplateResult | Temp => {
|
render = (): TemplateResult => {
|
||||||
return html``;
|
return html``;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
86
src/common/core/Validator/Validator.ts
Normal file
86
src/common/core/Validator/Validator.ts
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
import { AppFormElement } from 'components/';
|
||||||
|
import { validatorErrors } from 'core/constants';
|
||||||
|
import { firstUpper, validator } from 'core/utils';
|
||||||
|
|
||||||
|
class Validator {
|
||||||
|
public _error: string;
|
||||||
|
public _valid: boolean;
|
||||||
|
constructor(public input: any, public form: AppFormElement, public rules: string) {}
|
||||||
|
|
||||||
|
get value() {
|
||||||
|
return this.input?._value;
|
||||||
|
}
|
||||||
|
|
||||||
|
get name() {
|
||||||
|
return this.input?.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
get error() {
|
||||||
|
return this._error;
|
||||||
|
}
|
||||||
|
|
||||||
|
set error(error) {
|
||||||
|
this._error = error;
|
||||||
|
}
|
||||||
|
|
||||||
|
get valid() {
|
||||||
|
return this._valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
set valid(error) {
|
||||||
|
this._valid = error;
|
||||||
|
}
|
||||||
|
|
||||||
|
validate = () => {
|
||||||
|
const rules = this.rules?.split('|').filter((a) => a);
|
||||||
|
const value = this.value;
|
||||||
|
const validArr = rules
|
||||||
|
.slice()
|
||||||
|
.reverse()
|
||||||
|
.map((rule) => {
|
||||||
|
let args = [];
|
||||||
|
if (rule.includes('[') && rule.includes(']')) {
|
||||||
|
const begSep = rule.lastIndexOf('[');
|
||||||
|
const endSep = rule.lastIndexOf(']');
|
||||||
|
|
||||||
|
args = rule
|
||||||
|
.slice(begSep + 1, endSep)
|
||||||
|
.split(',')
|
||||||
|
.map((arg: string) => {
|
||||||
|
if (this.form && arg?.includes?.('field')) {
|
||||||
|
const begBr = arg.lastIndexOf('(');
|
||||||
|
const endBr = arg.lastIndexOf(')');
|
||||||
|
const field = arg.slice(begBr + 1, endBr);
|
||||||
|
|
||||||
|
return this.form?.values[field];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
rule = rule.slice(0, begSep);
|
||||||
|
}
|
||||||
|
let validRule = validator?.[rule];
|
||||||
|
let ruleArray = validRule ? Array.isArray(validRule) : false;
|
||||||
|
let valid = true;
|
||||||
|
|
||||||
|
if (validRule) {
|
||||||
|
if (ruleArray) {
|
||||||
|
valid = validRule?.[0]?.(value, ...args);
|
||||||
|
} else {
|
||||||
|
valid = validRule?.(value, ...args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!valid) {
|
||||||
|
const error = validatorErrors[rule]?.replaceAll('{- name}', firstUpper(this.name?.toString()));
|
||||||
|
this.error = ruleArray ? validRule?.[1]?.replaceAll('{- name}', firstUpper(this.name?.toString())) : error;
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
|
});
|
||||||
|
const _return = validArr?.includes(false);
|
||||||
|
if (_return) {
|
||||||
|
this.error = null;
|
||||||
|
}
|
||||||
|
this.valid = !_return;
|
||||||
|
return !_return;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Validator;
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
export { default as BaseElement } from './core/BaseElement/BaseElement';
|
export { default as BaseElement } from './core/BaseElement/BaseElement';
|
||||||
|
export { default as Validator } from './core/Validator/Validator';
|
||||||
|
|
||||||
export * from './layouts';
|
export * from './layouts';
|
||||||
export * from './components';
|
export * from './components';
|
||||||
export * from './pages';
|
export * from './pages';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { attr } from '@github/catalyst';
|
import { attr } from '@github/catalyst';
|
||||||
import { html, render } from 'lit-html';
|
import { html, render } from 'core/utils';
|
||||||
import { BaseElement } from 'common/';
|
import { BaseElement } from 'common/';
|
||||||
import { isTrue } from 'core/utils';
|
import { isTrue } from 'core/utils';
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { findMethod, firstUpper } from 'core/utils';
|
import { closest, findMethod, firstUpper } from 'core/utils';
|
||||||
import { html } from 'lit-html';
|
import { html } from 'core/utils';
|
||||||
import randomId from 'core/utils/random-id';
|
import randomId from 'core/utils/random-id';
|
||||||
import validator from 'validator';
|
|
||||||
import { validatorErrors } from 'core/constants';
|
import { validatorErrors } from 'core/constants';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement, Validator } from 'common/';
|
||||||
|
import { AppFormElement } from 'components/app-form/AppFormElement';
|
||||||
|
|
||||||
@controller
|
@controller
|
||||||
class AppDropdownElement extends BaseComponentElement {
|
class AppDropdownElement extends BaseComponentElement {
|
||||||
@@ -13,12 +13,12 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
@attr rules: string;
|
@attr rules: string;
|
||||||
@target main: HTMLElement;
|
@target main: HTMLElement;
|
||||||
@target inp: HTMLElement;
|
@target inp: HTMLElement;
|
||||||
|
@target dropdowncontainer: HTMLElement;
|
||||||
@attr displaykey: string = 'name';
|
@attr displaykey: string = 'name';
|
||||||
@attr valuekey: string = 'id';
|
@attr valuekey: string = 'id';
|
||||||
@attr fetch: string;
|
@attr fetch: string;
|
||||||
fetchFunc: any;
|
@closest appForm: AppFormElement;
|
||||||
|
|
||||||
error: boolean;
|
|
||||||
errorMessage: string;
|
errorMessage: string;
|
||||||
|
|
||||||
searchPhrase: string;
|
searchPhrase: string;
|
||||||
@@ -32,10 +32,56 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
totalItems: number;
|
totalItems: number;
|
||||||
page: number = 1;
|
page: number = 1;
|
||||||
rpp: number = 30;
|
rpp: number = 30;
|
||||||
|
validator: Validator;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateCallback = () => {
|
||||||
|
this.dropdowncontainer?.scrollIntoView();
|
||||||
|
};
|
||||||
|
|
||||||
|
public elementConnected = (): void => {
|
||||||
|
this.validator = new Validator(this, this.appForm, this.rules);
|
||||||
|
this.randId = `${name}${randomId()}`;
|
||||||
|
this.update();
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
rpp: this.rpp,
|
||||||
|
page: this.page,
|
||||||
|
};
|
||||||
|
this.getItems(options);
|
||||||
|
};
|
||||||
|
|
||||||
|
attributeChangedCallback(): void {
|
||||||
|
this.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
setError = (error) => {
|
||||||
|
this.validator.error = error;
|
||||||
|
};
|
||||||
|
|
||||||
|
get error(): string {
|
||||||
|
return this.validator?.error;
|
||||||
|
}
|
||||||
|
|
||||||
|
get isValid(): boolean {
|
||||||
|
return this.validator?.valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
get required(): boolean {
|
||||||
|
return this.rules.includes('required');
|
||||||
|
}
|
||||||
|
|
||||||
|
get _value() {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
validate = (): boolean => {
|
||||||
|
return this.validator.validate();
|
||||||
|
};
|
||||||
|
|
||||||
getItems = async (options?: any): Promise<void> => {
|
getItems = async (options?: any): Promise<void> => {
|
||||||
if (typeof this.fetchFunc !== 'function') return;
|
if (typeof this.fetchFunc !== 'function') return;
|
||||||
try {
|
try {
|
||||||
@@ -68,8 +114,6 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
return value == item[valuekey];
|
return value == item[valuekey];
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(item, value, valuekey);
|
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,61 +127,16 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public elementConnected = (): void => {
|
get fetchFunc() {
|
||||||
this.randId = `${name}${randomId()}`;
|
return findMethod(this.fetch, this.appMain);
|
||||||
this.fetchFunc = findMethod(this.fetch, this.appMain);
|
}
|
||||||
this.update();
|
|
||||||
|
|
||||||
const options = {
|
setOpen = (isOpen) => {
|
||||||
rpp: this.rpp,
|
this.isOpen = isOpen;
|
||||||
page: this.page,
|
|
||||||
};
|
};
|
||||||
this.getItems(options);
|
|
||||||
};
|
|
||||||
|
|
||||||
attributeChangedCallback(): void {
|
|
||||||
this.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
get valid(): boolean {
|
|
||||||
return !!this.error;
|
|
||||||
}
|
|
||||||
|
|
||||||
get required(): boolean {
|
|
||||||
return this.rules.includes('required');
|
|
||||||
}
|
|
||||||
|
|
||||||
validate(): boolean {
|
|
||||||
let _return = true;
|
|
||||||
const rules = this.rules?.split('|').filter((a) => a);
|
|
||||||
const value = (this.inp as HTMLSelectElement)?.value;
|
|
||||||
rules
|
|
||||||
.slice()
|
|
||||||
.reverse()
|
|
||||||
.forEach((rule) => {
|
|
||||||
let valid = true;
|
|
||||||
if (rule == 'required') {
|
|
||||||
if (value === '') valid = false;
|
|
||||||
} else {
|
|
||||||
if (validator.hasOwnProperty(rule)) {
|
|
||||||
valid = validator?.[rule]?.(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!valid) {
|
|
||||||
const error = validatorErrors[rule]?.replaceAll('{- name}', firstUpper(this.name?.toString()));
|
|
||||||
_return = false;
|
|
||||||
this.error = error;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (_return) {
|
|
||||||
this.error = null;
|
|
||||||
}
|
|
||||||
this.update();
|
|
||||||
return _return;
|
|
||||||
}
|
|
||||||
|
|
||||||
openDropdown = () => {
|
openDropdown = () => {
|
||||||
this.isOpen = true;
|
this.setOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
stopPropagation = (e) => {
|
stopPropagation = (e) => {
|
||||||
@@ -146,24 +145,24 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
|
|
||||||
toggleDropdown = () => {
|
toggleDropdown = () => {
|
||||||
const isOpen = this.isOpen;
|
const isOpen = this.isOpen;
|
||||||
this.isOpen = !isOpen;
|
this.setOpen(!isOpen);
|
||||||
};
|
};
|
||||||
|
|
||||||
itemSelected = (e) => {
|
itemSelected = (e) => {
|
||||||
const value = (e.target as HTMLSpanElement).getAttribute('data-value');
|
const value = (e.target as HTMLSpanElement).getAttribute('data-value');
|
||||||
this.value = value;
|
this.setOpen(false);
|
||||||
this.isOpen = false;
|
this.setValue(value);
|
||||||
|
this.appForm?.inputChange(e);
|
||||||
};
|
};
|
||||||
|
|
||||||
get _value() {
|
setValue = (value) => {
|
||||||
return this.value;
|
this.value = value;
|
||||||
}
|
this.update();
|
||||||
|
};
|
||||||
|
|
||||||
render = () => {
|
render = () => {
|
||||||
const { label, error, errorMessage, isOpen, searchPhrase, items, selectedItem, displaykey, valuekey } = this;
|
const { label, error, errorMessage, isOpen, searchPhrase, items, selectedItem, displaykey, valuekey } = this;
|
||||||
|
|
||||||
console.log(isOpen);
|
|
||||||
|
|
||||||
const renderItem = (item) => {
|
const renderItem = (item) => {
|
||||||
return html` <li
|
return html` <li
|
||||||
class="dropdown-custom-listitem ${selectedItem?.[valuekey] == item[valuekey] ? '--selected' : ''}"
|
class="dropdown-custom-listitem ${selectedItem?.[valuekey] == item[valuekey] ? '--selected' : ''}"
|
||||||
@@ -175,7 +174,7 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const renderItems = (_items) => {
|
const renderItems = (_items) => {
|
||||||
return _items.map((item) => renderItem(item));
|
return _items?.map((item) => renderItem(item));
|
||||||
};
|
};
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
@@ -183,12 +182,12 @@ class AppDropdownElement extends BaseComponentElement {
|
|||||||
<label app-action="click:app-dropdown#openDropdown">
|
<label app-action="click:app-dropdown#openDropdown">
|
||||||
${label ? html`<div>${label}</div>` : html``}
|
${label ? html`<div>${label}</div>` : html``}
|
||||||
<div class="dropdown-custom" app-action="click:app-dropdown#stopPropagation">
|
<div class="dropdown-custom" app-action="click:app-dropdown#stopPropagation">
|
||||||
<div class="dropdown-custom-top" app-action="click:app-dropdown#toggleDropdown">
|
<div class="dropdown-custom-top${isOpen ? ' --open' : ''}" app-action="click:app-dropdown#toggleDropdown">
|
||||||
<span class="dropdown-custom-fieldname">${selectedItem ? selectedItem[displaykey] : 'Select'}</span>
|
<span class="dropdown-custom-fieldname">${selectedItem ? selectedItem[displaykey] : 'Select'}</span>
|
||||||
</div>
|
</div>
|
||||||
${isOpen
|
${isOpen
|
||||||
? html`
|
? html`
|
||||||
<div class="dropdown-custom-open">
|
<div class="dropdown-custom-open" data-target="app-dropdown.dropdowncontainer">
|
||||||
<input
|
<input
|
||||||
class="dropdown-custom-search"
|
class="dropdown-custom-search"
|
||||||
type="text"
|
type="text"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult, unsafeHTML } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
import { AppDropdownElement } from 'components/app-dropdown/AppDropdownElement';
|
import { AppDropdownElement } from 'components/app-dropdown/AppDropdownElement';
|
||||||
import { InputFieldElement } from 'components/input-field/InputFieldElement';
|
import { InputFieldElement } from 'components/input-field/InputFieldElement';
|
||||||
@@ -20,6 +20,10 @@ class AppFormElement extends BaseComponentElement {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get submitFunc() {
|
||||||
|
return findMethod(this.custom, this.appMain);
|
||||||
|
}
|
||||||
|
|
||||||
public inputChange = (e) => {
|
public inputChange = (e) => {
|
||||||
this.validate();
|
this.validate();
|
||||||
this.update();
|
this.update();
|
||||||
@@ -30,19 +34,19 @@ class AppFormElement extends BaseComponentElement {
|
|||||||
if (!this.valid) {
|
if (!this.valid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const actionString = this.custom;
|
this.submitFunc?.(this.values);
|
||||||
const submitFunc = findMethod(actionString, this.appMain);
|
|
||||||
submitFunc?.(this.values);
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
public validate = () => {
|
public validate = () => {
|
||||||
this.isValid = true;
|
const validArr = [];
|
||||||
this.inputField?.forEach((input) => {
|
this.inputField?.forEach((input) => {
|
||||||
if (input?.error) {
|
validArr.push(input?.validate());
|
||||||
this.isValid = false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
this.appDropdown?.forEach((input) => {
|
||||||
|
validArr.push(input?.validate());
|
||||||
|
});
|
||||||
|
this.isValid = !validArr?.includes(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
public setError = (error) => {
|
public setError = (error) => {
|
||||||
@@ -75,6 +79,19 @@ class AppFormElement extends BaseComponentElement {
|
|||||||
return formObject;
|
return formObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getInput = (name: string): InputFieldElement | AppDropdownElement => {
|
||||||
|
let formObject;
|
||||||
|
this.inputField.forEach((input: InputFieldElement) => {
|
||||||
|
const inputType = input;
|
||||||
|
if (inputType.name === name) formObject = inputType;
|
||||||
|
});
|
||||||
|
this.appDropdown.forEach((input: AppDropdownElement) => {
|
||||||
|
const inputType = input;
|
||||||
|
if (inputType.name === name) formObject = inputType;
|
||||||
|
});
|
||||||
|
return formObject;
|
||||||
|
};
|
||||||
|
|
||||||
get valid() {
|
get valid() {
|
||||||
let _valid = 0;
|
let _valid = 0;
|
||||||
this.inputField?.forEach((input) => {
|
this.inputField?.forEach((input) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { isTrue } from 'core/utils';
|
import { isTrue } from 'core/utils';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { AppMainElement } from 'components/app-main/AppMainElement';
|
import { AppMainElement } from 'components/app-main/AppMainElement';
|
||||||
import { RouterService } from 'core/services';
|
import { RouterService } from 'core/services';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { html } from 'lit-html';
|
import { html } from 'core/utils';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
|
|
||||||
@controller
|
@controller
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
import { AppMainElement } from 'components/app-main/AppMainElement';
|
import { AppMainElement } from 'components/app-main/AppMainElement';
|
||||||
import { MenuItemElement } from 'components/menu-item/MenuItemElement';
|
import { MenuItemElement } from 'components/menu-item/MenuItemElement';
|
||||||
@@ -78,7 +78,7 @@ class AppMenuElement extends BaseComponentElement {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
modalTransaction = (): void => {
|
modalTransaction = (s): void => {
|
||||||
const _modal = this.appMain.appModal;
|
const _modal = this.appMain.appModal;
|
||||||
if (_modal) {
|
if (_modal) {
|
||||||
this.appMain.closeModal();
|
this.appMain.closeModal();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
import { CircleLoaderElement } from 'components/circle-loader/CircleLoaderElement';
|
import { CircleLoaderElement } from 'components/circle-loader/CircleLoaderElement';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { attr, controller } from '@github/catalyst';
|
import { attr, controller } from '@github/catalyst';
|
||||||
import { html } from 'lit-html';
|
import { html } from 'core/utils';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
|
|
||||||
@controller
|
@controller
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { closest, firstUpper } from 'core/utils';
|
import { closest, firstUpper } from 'core/utils';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { RouterService } from 'core/services';
|
|
||||||
import randomId from 'core/utils/random-id';
|
import randomId from 'core/utils/random-id';
|
||||||
import validator from 'validator';
|
|
||||||
import { validatorErrors } from 'core/constants';
|
import { validatorErrors } from 'core/constants';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement, Validator } from 'common/';
|
||||||
import { AppFormElement } from 'components/app-form/AppFormElement';
|
import { AppFormElement } from 'components/app-form/AppFormElement';
|
||||||
|
import { validator } from 'core/utils';
|
||||||
|
|
||||||
@controller
|
@controller
|
||||||
class InputFieldElement extends BaseComponentElement {
|
class InputFieldElement extends BaseComponentElement {
|
||||||
@@ -17,21 +16,33 @@ class InputFieldElement extends BaseComponentElement {
|
|||||||
@target main: HTMLElement;
|
@target main: HTMLElement;
|
||||||
@target inp: HTMLElement;
|
@target inp: HTMLElement;
|
||||||
@closest appForm: AppFormElement;
|
@closest appForm: AppFormElement;
|
||||||
error: string;
|
valid: boolean;
|
||||||
displayError: boolean;
|
displayError: boolean;
|
||||||
randId: string;
|
randId: string;
|
||||||
|
|
||||||
|
validator: Validator;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public elementConnected = (): void => {
|
public elementConnected = (): void => {
|
||||||
|
this.validator = new Validator(this, this.appForm, this.rules);
|
||||||
this.randId = `${name}${randomId()}`;
|
this.randId = `${name}${randomId()}`;
|
||||||
this.update();
|
this.update();
|
||||||
this.validate();
|
this.validate();
|
||||||
};
|
};
|
||||||
|
|
||||||
get valid(): boolean {
|
setError = (error) => {
|
||||||
return !!this.error;
|
this.validator.error = error;
|
||||||
|
};
|
||||||
|
|
||||||
|
get error(): string {
|
||||||
|
return this.validator.error;
|
||||||
|
}
|
||||||
|
|
||||||
|
get isValid(): boolean {
|
||||||
|
return this.validator.valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
get required(): boolean {
|
get required(): boolean {
|
||||||
@@ -43,31 +54,7 @@ class InputFieldElement extends BaseComponentElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validate = (): boolean => {
|
validate = (): boolean => {
|
||||||
let _return = true;
|
return this.validator.validate();
|
||||||
const rules = this.rules?.split('|').filter((a) => a);
|
|
||||||
const value = (this.inp as HTMLInputElement)?.value;
|
|
||||||
rules
|
|
||||||
.slice()
|
|
||||||
.reverse()
|
|
||||||
.forEach((rule) => {
|
|
||||||
let valid = true;
|
|
||||||
if (rule == 'required') {
|
|
||||||
if (value === '') valid = false;
|
|
||||||
} else {
|
|
||||||
if (validator.hasOwnProperty(rule)) {
|
|
||||||
valid = validator?.[rule]?.(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!valid) {
|
|
||||||
const error = validatorErrors[rule]?.replaceAll('{- name}', firstUpper(this.name?.toString()));
|
|
||||||
_return = false;
|
|
||||||
this.error = error;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (_return) {
|
|
||||||
this.error = null;
|
|
||||||
}
|
|
||||||
return _return;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
validateDisplay = () => {
|
validateDisplay = () => {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { AppMainElement } from 'components/app-main/AppMainElement';
|
import { AppMainElement } from 'components/app-main/AppMainElement';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { attr, controller, target } from '@github/catalyst';
|
import { attr, controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BaseComponentElement } from 'common/';
|
import { BaseComponentElement } from 'common/';
|
||||||
import { CircleLoaderElement } from 'components/circle-loader/CircleLoaderElement';
|
import { CircleLoaderElement } from 'components/circle-loader/CircleLoaderElement';
|
||||||
import { findMethod } from 'core/utils';
|
import { findMethod } from 'core/utils';
|
||||||
@@ -26,13 +26,14 @@ class WalletHeaderElement extends BaseComponentElement {
|
|||||||
this.update();
|
this.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
executeFetch = async (options?): Promise<void> => {
|
get submitFunc() {
|
||||||
const actionString = this.custom;
|
return findMethod(this.custom, this.appMain);
|
||||||
const submitFunc = findMethod(actionString, this.appMain);
|
}
|
||||||
|
|
||||||
|
executeFetch = async (options?): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
this.loader?.start?.();
|
this.loader?.start?.();
|
||||||
await submitFunc(options);
|
await this.submitFunc(options);
|
||||||
this.loader?.stop?.();
|
this.loader?.stop?.();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.loader?.stop?.();
|
this.loader?.stop?.();
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ class AuthStore {
|
|||||||
set token(token: string) {
|
set token(token: string) {
|
||||||
const { _token } = this;
|
const { _token } = this;
|
||||||
const _changed = token != _token;
|
const _changed = token != _token;
|
||||||
console.log(token);
|
|
||||||
if (_changed) {
|
if (_changed) {
|
||||||
this._token = token;
|
this._token = token;
|
||||||
localStorage.setItem('token', token);
|
localStorage.setItem('token', token);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { AppMainElement } from 'components/';
|
import { AppMainElement } from 'components/';
|
||||||
|
|
||||||
export default function findMethod(actionString: string, appMain: AppMainElement): Function {
|
export default function findMethod(actionString: string, appMain: AppMainElement): Function {
|
||||||
if (actionString) {
|
if (actionString && appMain) {
|
||||||
const methodSep = actionString.lastIndexOf('#');
|
const methodSep = actionString.lastIndexOf('#');
|
||||||
const tag = actionString.slice(0, methodSep);
|
const tag = actionString.slice(0, methodSep);
|
||||||
const method = actionString.slice(methodSep + 1);
|
const method = actionString.slice(methodSep + 1);
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
export * from './library';
|
||||||
|
export * from './templating';
|
||||||
|
|
||||||
export { default as toKebabCase } from './toKebabCase';
|
export { default as toKebabCase } from './toKebabCase';
|
||||||
export { default as update } from './update-deco';
|
export { default as update } from './update-deco';
|
||||||
export { default as index } from './index-deco';
|
export { default as index } from './index-deco';
|
||||||
@@ -7,3 +10,4 @@ export { default as firstUpper } from './first-upper';
|
|||||||
export { default as query } from './query-deco';
|
export { default as query } from './query-deco';
|
||||||
export { default as querys } from './querys-deco';
|
export { default as querys } from './querys-deco';
|
||||||
export { default as findMethod } from './find-method';
|
export { default as findMethod } from './find-method';
|
||||||
|
export { default as validator } from './validator';
|
||||||
|
|||||||
3
src/core/utils/library.ts
Normal file
3
src/core/utils/library.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { attr, controller, target, targets} from '@github/catalyst';
|
||||||
|
|
||||||
|
export { attr, controller, target, targets }
|
||||||
3
src/core/utils/templating.ts
Normal file
3
src/core/utils/templating.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { render, html, TemplateResult } from 'lit-html';
|
||||||
|
|
||||||
|
export { render, html, TemplateResult };
|
||||||
25
src/core/utils/validator.ts
Normal file
25
src/core/utils/validator.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import isEmail from 'validator/lib/isEmail';
|
||||||
|
import isDate from 'validator/lib/isDate';
|
||||||
|
import isNumeric from 'validator/lib/isNumeric';
|
||||||
|
import matches from 'validator/lib/matches';
|
||||||
|
|
||||||
|
const validator = {
|
||||||
|
is_email: [isEmail, '{- name} needs to be email format.'],
|
||||||
|
is_date: isDate,
|
||||||
|
is_numeric: isNumeric,
|
||||||
|
matches: matches,
|
||||||
|
is_same: [isSame, '{- name} needs to be same to {- field}.'],
|
||||||
|
required: [required, '{- name} is required.'],
|
||||||
|
};
|
||||||
|
|
||||||
|
function required(str: string): boolean {
|
||||||
|
if (!str || str == '') return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSame(str: string, field: string): boolean {
|
||||||
|
if (str === field) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default validator;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { closest } from 'core/utils';
|
import { closest } from 'core/utils';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BaseLayoutElement } from 'common/layouts';
|
import { BaseLayoutElement } from 'common/layouts';
|
||||||
import { AppMainElement } from 'components/';
|
import { AppMainElement } from 'components/';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { closest } from 'core/utils';
|
import { closest } from 'core/utils';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BaseLayoutElement } from 'common/layouts';
|
import { BaseLayoutElement } from 'common/layouts';
|
||||||
import { AppMainElement } from 'components/';
|
import { AppMainElement } from 'components/';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { TransactionsService } from 'services/';
|
import { TransactionsService } from 'services/';
|
||||||
import { AppMainElement, AppPaginationElement } from 'components/';
|
import { AppMainElement, AppPaginationElement } from 'components/';
|
||||||
import { BasePageElement } from 'common/';
|
import { BasePageElement } from 'common/';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult, until } from 'lit-html';
|
import { html, TemplateResult, until } from 'core/utils';
|
||||||
import { WalletService } from 'services/';
|
import { WalletService } from 'services/';
|
||||||
import { AppMainElement, WalletHeaderElement } from 'components/';
|
import { AppMainElement, WalletHeaderElement } from 'components/';
|
||||||
import { BasePageElement } from 'common/';
|
import { BasePageElement } from 'common/';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { targets, controller, target } from '@github/catalyst';
|
import { targets, controller, target } from '@github/catalyst';
|
||||||
//import { html, TemplateResult } from "lit-html";
|
//import { html, TemplateResult } from "core/utils";
|
||||||
import { html, render, TemplateResult } from 'lit-html';
|
import { html, render, TemplateResult } from 'core/utils';
|
||||||
import { AuthService } from 'services/';
|
import { AuthService } from 'services/';
|
||||||
import { AppFormElement, InputFieldElement } from 'components/';
|
import { AppFormElement, InputFieldElement } from 'components/';
|
||||||
import { RouterService } from 'core/services';
|
import { RouterService } from 'core/services';
|
||||||
@@ -58,10 +58,10 @@ class LoginPageElement extends BasePageElement {
|
|||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err?.errorCode == 400103) {
|
if (err?.errorCode == 400103) {
|
||||||
this.emailInput.error = err?.message;
|
this.emailInput.setError(err?.message);
|
||||||
this.emailInput.update();
|
this.emailInput.update();
|
||||||
} else if (err?.errorCode == 400104) {
|
} else if (err?.errorCode == 400104) {
|
||||||
this.passwordInput.error = err?.message;
|
this.passwordInput.setError(err?.message);
|
||||||
this.passwordInput.update();
|
this.passwordInput.update();
|
||||||
} else {
|
} else {
|
||||||
this.appForm?.setError('Unable to log in!');
|
this.appForm?.setError('Unable to log in!');
|
||||||
@@ -86,7 +86,7 @@ class LoginPageElement extends BasePageElement {
|
|||||||
data-name="email"
|
data-name="email"
|
||||||
data-label="E-mail"
|
data-label="E-mail"
|
||||||
data-targets="login-page.inputs"
|
data-targets="login-page.inputs"
|
||||||
data-rules="required|isEmail"
|
data-rules="required|is_email"
|
||||||
></input-field>
|
></input-field>
|
||||||
<input-field
|
<input-field
|
||||||
data-type="password"
|
data-type="password"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { controller } from '@github/catalyst';
|
import { controller } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { BasePageElement } from 'common/';
|
import { BasePageElement } from 'common/';
|
||||||
|
|
||||||
@controller
|
@controller
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
import { targets, controller } from '@github/catalyst';
|
import { targets, controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { AuthService } from 'services/';
|
import { AuthService } from 'services/';
|
||||||
import { InputFieldElement } from 'components/';
|
import { AppFormElement, InputFieldElement } from 'components/';
|
||||||
import { BasePageElement } from 'common/';
|
import { BasePageElement } from 'common/';
|
||||||
|
|
||||||
@controller
|
@controller
|
||||||
class RegisterPageElement extends BasePageElement {
|
class RegisterPageElement extends BasePageElement {
|
||||||
@targets inputs: Array<InputFieldElement>;
|
@targets inputs: Array<InputFieldElement>;
|
||||||
|
@target appForm: AppFormElement;
|
||||||
authService: AuthService;
|
authService: AuthService;
|
||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
@@ -37,7 +38,17 @@ class RegisterPageElement extends BasePageElement {
|
|||||||
if (response?.id) {
|
if (response?.id) {
|
||||||
this.appMain.routerService.goTo('/login');
|
this.appMain.routerService.goTo('/login');
|
||||||
}
|
}
|
||||||
} catch (err) {}
|
} catch (err) {
|
||||||
|
if (err?.errorCode == 400103) {
|
||||||
|
this.appForm?.getInput('email')?.setError(err?.message);
|
||||||
|
this.appForm?.getInput('email')?.update();
|
||||||
|
} else if (err?.errorCode == 400104) {
|
||||||
|
this.appForm?.getInput('password')?.setError(err?.message);
|
||||||
|
this.appForm?.getInput('password')?.update();
|
||||||
|
} else {
|
||||||
|
this.appForm?.setError('Unable to log in!');
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
validate(): boolean {
|
validate(): boolean {
|
||||||
@@ -51,7 +62,7 @@ class RegisterPageElement extends BasePageElement {
|
|||||||
|
|
||||||
render = (): TemplateResult => {
|
render = (): TemplateResult => {
|
||||||
return html`
|
return html`
|
||||||
<app-form data-custom="register-page#onSubmit" data-has-cancel="true">
|
<app-form data-custom="register-page#onSubmit" data-has-cancel="true" data-target="register-page.appForm">
|
||||||
<input-field
|
<input-field
|
||||||
data-type="text"
|
data-type="text"
|
||||||
data-name="username"
|
data-name="username"
|
||||||
@@ -64,7 +75,7 @@ class RegisterPageElement extends BasePageElement {
|
|||||||
data-name="email"
|
data-name="email"
|
||||||
data-label="E-mail"
|
data-label="E-mail"
|
||||||
data-targets="register-page.inputs"
|
data-targets="register-page.inputs"
|
||||||
data-rules="required|isEmail"
|
data-rules="required|is_email"
|
||||||
></input-field>
|
></input-field>
|
||||||
<input-field
|
<input-field
|
||||||
data-type="password"
|
data-type="password"
|
||||||
@@ -74,6 +85,13 @@ class RegisterPageElement extends BasePageElement {
|
|||||||
data-rules="required"
|
data-rules="required"
|
||||||
>
|
>
|
||||||
</input-field>
|
</input-field>
|
||||||
|
<input-field
|
||||||
|
data-type="password"
|
||||||
|
data-name="confirmpassword"
|
||||||
|
data-label="Confirm Password"
|
||||||
|
data-targets="register-page.inputs"
|
||||||
|
data-rules="required|is_same[field(password)]"
|
||||||
|
>
|
||||||
</app-form>
|
</app-form>
|
||||||
`;
|
`;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { targets, controller } from '@github/catalyst';
|
import { targets, controller } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { AuthService, TransactionsService, WalletService } from 'services/';
|
import { AuthService, TransactionsService, WalletService } from 'services/';
|
||||||
import { InputFieldElement } from 'components/';
|
import { InputFieldElement } from 'components/';
|
||||||
import { RouterService } from 'core/services';
|
import { RouterService } from 'core/services';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { targets, controller } from '@github/catalyst';
|
import { targets, controller } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { AuthService, WalletService } from 'services/';
|
import { AuthService, WalletService } from 'services/';
|
||||||
import { InputFieldElement } from 'components/';
|
import { InputFieldElement } from 'components/';
|
||||||
import { RouterService } from 'core/services';
|
import { RouterService } from 'core/services';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { targets, controller, target } from '@github/catalyst';
|
import { targets, controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { AuthService, WalletService } from 'services/';
|
import { AuthService, WalletService } from 'services/';
|
||||||
import { AppPaginationElement, InputFieldElement } from 'components/';
|
import { AppPaginationElement, InputFieldElement } from 'components/';
|
||||||
import { BasePageElement } from 'common/';
|
import { BasePageElement } from 'common/';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { controller, target } from '@github/catalyst';
|
import { controller, target } from '@github/catalyst';
|
||||||
import { html, TemplateResult } from 'lit-html';
|
import { html, TemplateResult } from 'core/utils';
|
||||||
import { TransactionsService, WalletService } from 'services/';
|
import { TransactionsService, WalletService } from 'services/';
|
||||||
import { AppMainElement, AppPaginationElement, WalletHeaderElement } from 'components/';
|
import { AppMainElement, AppPaginationElement, WalletHeaderElement } from 'components/';
|
||||||
import { BasePageElement } from 'common/';
|
import { BasePageElement } from 'common/';
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
.dropdown-custom {
|
.dropdown-custom {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
|
position: relative;
|
||||||
div.dropdown-custom-top {
|
div.dropdown-custom-top {
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #ffffff;
|
background-color: $white;
|
||||||
border: 1px solid transparent;
|
color: $black;
|
||||||
color: #09090a;
|
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 5px 0;
|
padding: 5px 0;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
border: 1px solid #767676;
|
border: 1px solid $white;
|
||||||
border-radius: 3px;
|
border-radius: 5px;
|
||||||
&::after {
|
&::after {
|
||||||
content: "";
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
@@ -26,12 +26,12 @@
|
|||||||
border-top: 8px solid #2e2e2e;
|
border-top: 8px solid #2e2e2e;
|
||||||
}
|
}
|
||||||
&.--open {
|
&.--open {
|
||||||
border-bottom-right-radius: 0;
|
border-bottom-right-radius: 0 !important;
|
||||||
border-bottom-left-radius: 0;
|
border-bottom-left-radius: 0 !important;
|
||||||
border-bottom: transparent;
|
border-bottom: transparent;
|
||||||
margin-bottom: 0 !important;
|
margin-bottom: 0 !important;
|
||||||
&::after {
|
&::after {
|
||||||
content: "";
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
div.dropdown-custom-open {
|
div.dropdown-custom-open {
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: calc(100% - 2 * 1px);
|
||||||
border-top: none;
|
border-top: none;
|
||||||
margin-top: 0 !important;
|
margin-top: 0 !important;
|
||||||
background-color: #fbfafa;
|
background-color: #fbfafa;
|
||||||
@@ -65,13 +65,15 @@
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
input.dropdown-custom-search {
|
input.dropdown-custom-search {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
width: calc(100% - 2 * 2px);
|
width: calc(100% - 2 * 2px);
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
background-color: #fbfbfb;
|
background-color: $white;
|
||||||
border: 1px solid #9c9c9c;
|
border: 1px solid $white;
|
||||||
border-radius: 0.3em;
|
border-radius: 0.3em;
|
||||||
&:hover {
|
&:hover {
|
||||||
border: 1px solid #b6b6b6;
|
border: 1px solid $white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ul.dropdown-custom-list {
|
ul.dropdown-custom-list {
|
||||||
|
|||||||
1
src/styles/input-field/index.scss
Normal file
1
src/styles/input-field/index.scss
Normal file
@@ -0,0 +1 @@
|
|||||||
|
@import './input-field.scss';
|
||||||
8
src/styles/input-field/input-field.scss
Normal file
8
src/styles/input-field/input-field.scss
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
input-field {
|
||||||
|
input {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
@import "./core/index.scss";
|
@import './core/index.scss';
|
||||||
@import "./menu-item/index.scss";
|
@import './menu-item/index.scss';
|
||||||
@import "./sidebar/index.scss";
|
@import './sidebar/index.scss';
|
||||||
@import "./modal/index.scss";
|
@import './modal/index.scss';
|
||||||
@import "./table/index.scss";
|
@import './table/index.scss';
|
||||||
@import "./app-loader/index.scss";
|
@import './app-loader/index.scss';
|
||||||
@import "./circle-loader/index.scss";
|
@import './circle-loader/index.scss';
|
||||||
@import "./page/index.scss";
|
@import './page/index.scss';
|
||||||
@import "./app-form/index.scss";
|
@import './app-form/index.scss';
|
||||||
@import "./layout/index.scss";
|
@import './layout/index.scss';
|
||||||
@import "./app-dropdown/index.scss";
|
@import './app-dropdown/index.scss';
|
||||||
|
@import './input-field/index.scss';
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ const path = require('path');
|
|||||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
const TerserPlugin = require("terser-webpack-plugin");
|
const TerserPlugin = require("terser-webpack-plugin");
|
||||||
const { DefinePlugin } = require('webpack');
|
const { DefinePlugin } = require('webpack');
|
||||||
|
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
||||||
|
|
||||||
const alias = {
|
const alias = {
|
||||||
common: path.resolve(__dirname, '/common'),
|
common: path.resolve(__dirname, '/common'),
|
||||||
@@ -52,7 +53,7 @@ module.exports = (env, args) => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
minimize: true,
|
minimize: true,
|
||||||
minimizer: [new TerserPlugin()],
|
minimizer: [new TerserPlugin(), new UglifyJsPlugin()],
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: path.join(__dirname, 'public'),
|
path: path.join(__dirname, 'public'),
|
||||||
|
|||||||
@@ -4069,9 +4069,9 @@ levn@^0.4.1:
|
|||||||
prelude-ls "^1.2.1"
|
prelude-ls "^1.2.1"
|
||||||
type-check "~0.4.0"
|
type-check "~0.4.0"
|
||||||
|
|
||||||
lit-html@^1.4.1:
|
core/utils@^1.4.1:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.4.1.tgz#0c6f3ee4ad4eb610a49831787f0478ad8e9ae5e0"
|
resolved "https://registry.yarnpkg.com/core/utils/-/core/utils-1.4.1.tgz#0c6f3ee4ad4eb610a49831787f0478ad8e9ae5e0"
|
||||||
integrity sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==
|
integrity sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==
|
||||||
|
|
||||||
load-json-file@^1.0.0:
|
load-json-file@^1.0.0:
|
||||||
|
|||||||
Reference in New Issue
Block a user