modules-pack
Version:
JavaScript Modules for Modern Frontend & Backend Projects
112 lines (105 loc) • 3.48 kB
JavaScript
import { stickyPlaceholder } from 'modules-pack/form/constants'
import { FIELD } from 'modules-pack/variables'
import { timeInThePast } from 'react-ui-pack/inputs/validationRules'
import { Active, capitalize, optionsFrom } from 'utils-pack'
import { namespace } from 'utils-pack/utility'
import { _USER, SEX } from './definitions'
import * as t from './translations'
import { _ } from './translations'
const sideEffects = {t}
/**
* CONSTANT VARIABLES ==========================================================
* =============================================================================
*/
export const USER = 'USER' // Namespace this module
export const USERS = 'USERS' // GraphQL field type for list query (to be lower-cased)
export const USER_CLIENT = namespace(USER, Active.SERVICE) // Namespace this module for frontend
export const USER_SERVER = namespace(USER, Active.SERVICE) // Namespace this module for backend
export const USER_MODEL = capitalize(USER) // db model name
export const SELF = `${USER}_SELF`
export const USER_LOGIN = `${USER}_LOGIN`
export const ROLE = {} // object of role values by name
for (const name in _USER.ROLE) {
ROLE[name] = _USER.ROLE[name]._
}
// Field IDs
FIELD.ID = {
GIVEN_NAME: `${USER}_GIVEN_NAME`,
SURNAME: `${USER}_SURNAME`,
FULL_NAME: `${USER}_FULL_NAME`,
ABOUT_ME: `${USER}_ABOUT_ME`,
BIRTHDAY: `${USER}_BIRTHDAY`,
BIRTH_n_SEX: `${USER}_BIRTH_&_SEX`,
ROLE: `${USER}_ROLE`,
SEX: `${USER}_SEX`,
}
// Lists
FIELD.FOR = {
/* To be defined on implementation */
// USER_CONTACTS: [
// {id: FIELD.ID.EMAIL, required},
// {id: FIELD.ID.PHONE, required},
// {id: FIELD.ID.ADDRESS},
// ],
// USER_PROFILE: [
// {id: FIELD.ID.FULL_NAME},
// {id: FIELD.ID.BIRTH_n_SEX},
// ],
}
// Field Definitions
FIELD.DEF = {
[FIELD.ID.GIVEN_NAME]: {
name: 'name',
get label () {return _.GIVEN_NAME},
get hint () {return _.MY_GIVEN_NAME_IS},
view: FIELD.TYPE.INPUT,
},
[FIELD.ID.SURNAME]: {
name: 'surname',
get label () {return _.SURNAME},
get hint () {return _.MY_SURNAME_IS},
view: FIELD.TYPE.INPUT,
},
[FIELD.ID.ABOUT_ME]: {
name: 'about',
get label () {return _.ABOUT_ME},
get hint () {return _.ABOUT_ME},
get placeholder () {return _.BRIEF_DESCRIPTION},
type: 'textarea',
view: FIELD.TYPE.INPUT,
},
[FIELD.ID.BIRTHDAY]: {
name: 'birthday',
get label () {return _.DATE_OF_BIRTH},
get hint () {return _.I_WAS_BORN},
placeholder: 'dd.mm.yyyy',
stickyPlaceholder,
validate: [timeInThePast],
view: FIELD.TYPE.DATE,
},
[FIELD.ID.ROLE]: {
name: 'role',
get label () {return _.MY_ROLE},
get hint () {return _.REGISTER_ME_AS},
options: optionsFrom([_USER.ROLE.STAFF, _USER.ROLE.USER]),
view: FIELD.TYPE.DROPDOWN,
},
[FIELD.ID.SEX]: {
name: 'sex',
get label () {return _.GENDER},
get hint () {return _.I_AM},
options: optionsFrom([SEX.FEMALE, SEX.MALE]),
view: FIELD.TYPE.DROPDOWN,
// Cannot use minWidth because it causes overflow for long text, add minWidth for FormInSteps only
// style: {minWidth: 120},
},
[FIELD.ID.FULL_NAME]: {
// `required` can be passed down as group, leave undefined by default for customisation
items: [{id: FIELD.ID.GIVEN_NAME}, {id: FIELD.ID.SURNAME}],
view: FIELD.TYPE.GROUP,
},
[FIELD.ID.BIRTH_n_SEX]: {
items: [{id: FIELD.ID.BIRTHDAY}, {id: FIELD.ID.SEX}],
view: FIELD.TYPE.GROUP,
},
}