@uiowa/uiowa-mfk
Version:
mfk, uiowa-mfk, uiowa-favorite-mfk, mfk-string
1 lines • 34.4 kB
Source Map (JSON)
{"version":3,"file":"uiowa-uiowa-mfk.mjs","sources":["../../../../projects/uiowa/uiowa-mfk/src/lib/models/mfk-field-name.ts","../../../../projects/uiowa/uiowa-mfk/src/lib/models/mfk-field-option.ts","../../../../projects/uiowa/uiowa-mfk/src/lib/models/mfk-tools.ts","../../../../projects/uiowa/uiowa-mfk/src/lib/mfk-input/mfk-input.ts","../../../../projects/uiowa/uiowa-mfk/src/lib/mfk-input/mfk-input.html","../../../../projects/uiowa/uiowa-mfk/src/lib/mfk-string/mfk-string.ts","../../../../projects/uiowa/uiowa-mfk/src/lib/pipes/mfk-string.pipe.ts","../../../../projects/uiowa/uiowa-mfk/src/lib/pipes/who-key-string.pipe.ts","../../../../projects/uiowa/uiowa-mfk/src/public-api.ts","../../../../projects/uiowa/uiowa-mfk/src/uiowa-uiowa-mfk.ts"],"sourcesContent":["import { Mfk } from './mfk';\r\n\r\nexport class MfkFieldName {\r\n static FUND = 'fund' as keyof Mfk;\r\n static ORG = 'org' as keyof Mfk;\r\n static DEPT = 'dept' as keyof Mfk;\r\n static SUBDEPT = 'subdept' as keyof Mfk;\r\n static GRANTPGM = 'grantpgm' as keyof Mfk;\r\n static IACT = 'iact' as keyof Mfk;\r\n static OACT = 'oact' as keyof Mfk;\r\n static DACT = 'dact' as keyof Mfk;\r\n static FN = 'fn' as keyof Mfk;\r\n static CCTR = 'cctr' as keyof Mfk;\r\n static BRF = 'brf' as keyof Mfk;\r\n}\r\n","import { Mfk } from './mfk';\r\nimport { MfkFieldName } from './mfk-field-name';\r\n\r\n/**\r\n * Options for MFK field.\r\n *\r\n * allows to set field default value, set readonly attribute, set validation regex pattern. Example usage:\r\n *\r\n * ```typescript\r\n * new MfkFieldOption(MfkFieldName.IACT, '6218')\r\n * new MfkFieldOption(MfkFieldName.IACT, '6218', true)\r\n * new MfkFieldOption(MfkFieldName.BRF)\r\n * ```\r\n */\r\nexport class MfkFieldOption {\r\n readonly label: string;\r\n readonly width: number;\r\n readonly length: number;\r\n private readonly numericRegex = '^[0-9]+$';\r\n /**\r\n * Options for MFK field.\r\n *\r\n * allows to set field default value, set readonly attribute, set validation regex pattern. Example usage:\r\n *\r\n * ```typescript\r\n * new MfkFieldOption(MfkFieldName.IACT, '6218')\r\n * new MfkFieldOption(MfkFieldName.IACT, '6218', true)\r\n * new MfkFieldOption(MfkFieldName.BRF)\r\n * ```\r\n *\r\n * @param name (Required) the input field name. Use MfkFieldName type to get a proper value.\r\n * @param defaultValue (Optional) set a default value for this field. Default: ''.\r\n * @param readonly (Optional) set to true if the input field is readonly. Default: false.\r\n * @param valuePattern (Optional) set a regex for this field. Default: '^[0-9]+$'.\r\n */\r\n constructor(\r\n public readonly name: keyof Mfk,\r\n public readonly defaultValue: string = '',\r\n public readonly readonly: boolean = false,\r\n public readonly valuePattern: string = '^[0-9]+$'\r\n ) {\r\n switch (name) {\r\n case MfkFieldName.FUND:\r\n this.label = 'Fund';\r\n this.length = 3;\r\n break;\r\n case MfkFieldName.ORG:\r\n this.label = 'Org';\r\n this.length = 2;\r\n break;\r\n case MfkFieldName.DEPT:\r\n this.label = 'Dept';\r\n this.length = 4;\r\n break;\r\n case MfkFieldName.SUBDEPT:\r\n this.label = 'Subdept';\r\n this.length = 5;\r\n break;\r\n case MfkFieldName.GRANTPGM:\r\n this.label = `Grant/Pgm`;\r\n this.length = 8;\r\n break;\r\n case MfkFieldName.IACT:\r\n this.label = 'Iact';\r\n this.length = 4;\r\n break;\r\n case MfkFieldName.OACT:\r\n this.label = 'Oact';\r\n this.length = 3;\r\n break;\r\n case MfkFieldName.DACT:\r\n this.label = 'Dact';\r\n this.length = 5;\r\n break;\r\n case MfkFieldName.FN:\r\n this.label = 'Fn';\r\n this.length = 2;\r\n break;\r\n case MfkFieldName.CCTR:\r\n this.label = 'Cctr';\r\n this.length = 4;\r\n break;\r\n case MfkFieldName.BRF:\r\n this.label = 'Brf';\r\n this.length = 2;\r\n break;\r\n default:\r\n throw new Error(`MFK field name [${name.toUpperCase()}] is invalid.`);\r\n }\r\n\r\n this.width = this.length * 0.65 + 0.75;\r\n if (!valuePattern) {\r\n valuePattern = this.numericRegex;\r\n }\r\n if (this.readonly) {\r\n if (!this.defaultValue) {\r\n throw new Error(\r\n `Default value for readonly field [${name.toUpperCase()}] is required.`\r\n );\r\n }\r\n return; // if readonly, then don't validate default value\r\n }\r\n if (defaultValue) {\r\n if (defaultValue.length !== this.length) {\r\n throw new Error(\r\n `The default value [${defaultValue}] for ${name.toUpperCase()} is not ${\r\n this.length\r\n } digits long.`\r\n );\r\n }\r\n\r\n let reg = new RegExp(this.numericRegex);\r\n if (!reg.test(defaultValue)) {\r\n throw new Error(\r\n `The default value [${defaultValue}] for ${name.toUpperCase()} is not a number.`\r\n );\r\n }\r\n\r\n if (valuePattern !== this.numericRegex) {\r\n reg = new RegExp(valuePattern);\r\n if (!reg.test(defaultValue)) {\r\n throw new Error(\r\n `The default value [${defaultValue}] for ${name.toUpperCase()} doesn't match RegEx \"${valuePattern}\".`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Mfk } from './mfk';\r\nimport { MfkFieldName } from './mfk-field-name';\r\n\r\n/**\r\n * checks the equality of two Mfk objects\r\n * @param mfk1 an Mfk object\r\n * @param mfk2 an Mfk object\r\n */\r\nexport function areEqual(mfk1: Mfk, mfk2: Mfk): boolean {\r\n if (!mfk1 || !mfk2) {\r\n return false;\r\n }\r\n if (Object.keys(mfk1).length !== Object.keys(mfk2).length) {\r\n return false;\r\n }\r\n for (const k of Object.keys(mfk1)) {\r\n if (mfk1[k as keyof Mfk] !== mfk2[k as keyof Mfk]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * converts an Mfk object to a string by joining 10 fields with '-' symbol.\r\n * @param mfk An Mfk object\r\n */\r\nexport function stringify(mfk: Mfk | null): string {\r\n if (!mfk) {\r\n return '';\r\n }\r\n const s = Object.keys(mfk)\r\n .filter((k) => k !== MfkFieldName.BRF)\r\n .map((k) => mfk[k as keyof Mfk])\r\n .join('-');\r\n return s;\r\n}\r\n\r\n/**\r\n * creates an empty Mfk object with all 10 fields being empty string\r\n */\r\nexport function emptyMfk(): Mfk {\r\n return {\r\n fund: '',\r\n org: '',\r\n dept: '',\r\n subdept: '',\r\n grantpgm: '',\r\n iact: '',\r\n oact: '',\r\n dact: '',\r\n fn: '',\r\n cctr: '',\r\n };\r\n}\r\n\r\n/**\r\n * checks if an Mfk object is in a valid format\r\n */\r\nexport function validFormat(mfk: Mfk): boolean {\r\n var mfkString = stringify(mfk);\r\n if (mfkString.length !== 49) {\r\n return false;\r\n }\r\n if (mfk.brf && mfk.brf.length !== 2) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * checks if an Mfk string is in a valid format\r\n */\r\nexport function validMfkString(mfkString: string): boolean {\r\n const s = mfkString.replace(/\\D/g, '');\r\n return s.length >= 40;\r\n}\r\n\r\n/**\r\n * checks if each field of an Mfk object is in a valid format\r\n * returns an array of error messages\r\n * If the format is valid, then the returning array is empty.\r\n */\r\nexport function validateStructure(mfk: Mfk): string[] {\r\n const result: string[] = [];\r\n if (mfk.fund?.length !== 3) {\r\n result.push(`Invalid Fund: Length is incorrect (must be 3 digits)`);\r\n }\r\n if (mfk.org?.length !== 2) {\r\n result.push(`Invalid Org: Length is incorrect (must be 2 digits)`);\r\n }\r\n if (mfk.dept?.length !== 4) {\r\n result.push(`Invalid Dept: Length is incorrect (must be 4 digits)`);\r\n }\r\n if (mfk.subdept?.length !== 5) {\r\n result.push(`Invalid Subdept: Length is incorrect (must be 5 digits)`);\r\n }\r\n if (mfk.grantpgm?.length !== 8) {\r\n result.push(`Invalid Grant/Pgm: Length is incorrect (must be 8 digits)`);\r\n }\r\n if (mfk.iact?.length !== 4) {\r\n result.push(`Invalid Iact: Length is incorrect (must be 4 digits)`);\r\n }\r\n if (mfk.oact?.length !== 3) {\r\n result.push(`Invalid Oact: Length is incorrect (must be 3 digits)`);\r\n }\r\n if (mfk.dact?.length !== 5) {\r\n result.push(`Invalid Dact: Length is incorrect (must be 5 digits)`);\r\n }\r\n if (mfk.fn?.length !== 2) {\r\n result.push(`Invalid Fn: Length is incorrect (must be 2 digits)`);\r\n }\r\n if (mfk.cctr?.length !== 4) {\r\n result.push(`Invalid Cctr: Length is incorrect (must be 4 digits)`);\r\n }\r\n if (mfk.brf && mfk.brf.length !== 2) {\r\n result.push(`Invalid Brf: Length is incorrect (must be 2 digits)`);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Convert a string to an MFK object\r\n * @param mfkString MFK string\r\n * @returns MFK object\r\n */\r\nexport function toMfk(mfkString: string): Mfk {\r\n const mfk: Mfk = {} as Mfk;\r\n const s = mfkString.replace(/\\D/g, '');\r\n if (s && s.length >= 40) {\r\n mfk.fund = s.substring(0, 3);\r\n mfk.org = s.substring(3, 5);\r\n mfk.dept = s.substring(5, 9);\r\n mfk.subdept = s.substring(9, 14);\r\n mfk.grantpgm = s.substring(14, 22);\r\n mfk.iact = s.substring(22, 26);\r\n mfk.oact = s.substring(26, 29);\r\n mfk.dact = s.substring(29, 34);\r\n mfk.fn = s.substring(34, 36);\r\n mfk.cctr = s.substring(36, 40);\r\n if (s.length >= 42) {\r\n mfk.brf = s.substring(40, 42);\r\n }\r\n }\r\n return mfk;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n ElementRef,\r\n input,\r\n Input,\r\n OnChanges,\r\n output,\r\n SimpleChanges,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DigitOnlyDirective } from '@uiowa/digit-only';\r\nimport { Mfk } from '../models/mfk';\r\nimport { MfkFieldName } from '../models/mfk-field-name';\r\nimport { MfkFieldOption } from '../models/mfk-field-option';\r\nimport { areEqual, emptyMfk, stringify, toMfk } from '../models/mfk-tools';\r\n\r\n@Component({\r\n selector: 'uiowa-mfk-input',\r\n imports: [DigitOnlyDirective, FormsModule],\r\n templateUrl: './mfk-input.html',\r\n styleUrl: './mfk-input.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MfkInput implements OnChanges {\r\n private _mfk: Mfk = emptyMfk();\r\n @Input()\r\n set mfk(mfk: Mfk) {\r\n const m = Object.assign(emptyMfk(), mfk);\r\n this._options\r\n .filter((o) => o.defaultValue)\r\n .forEach((o) => (m[o.name] = m[o.name] || o.defaultValue));\r\n this._options.filter((o) => o.readonly).forEach((o) => (m[o.name] = o.defaultValue));\r\n this._mfk = m;\r\n }\r\n get mfk(): Mfk {\r\n return this._mfk;\r\n }\r\n mfkChange = output<Mfk>();\r\n\r\n options = input<MfkFieldOption[]>([]);\r\n protected _options: MfkFieldOption[] = [];\r\n mfkInputFields = viewChildren(DigitOnlyDirective);\r\n elementId = 'mfk-container_';\r\n elementName = 'mfk-container_';\r\n\r\n constructor(el: ElementRef) {\r\n const rand = Math.random().toString(36).substring(2);\r\n this.elementId +=\r\n el.nativeElement.getAttribute('id') || el.nativeElement.getAttribute('name') || rand;\r\n this.elementName +=\r\n el.nativeElement.getAttribute('name') || el.nativeElement.getAttribute('id') || rand;\r\n\r\n effect(() => {\r\n this._options = this.mergeOptions(this.options());\r\n this.mfk = this.mfk;\r\n this.mfkChange.emit(this.mfk);\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['mfk'] && changes['mfk'].currentValue) {\r\n if (!areEqual(changes['mfk'].previousValue, changes['mfk'].currentValue)) {\r\n this.mfk = changes['mfk'].currentValue;\r\n this.mfkChange.emit(this.mfk);\r\n }\r\n }\r\n }\r\n\r\n paste(e: ClipboardEvent) {\r\n const pastedInput: string = e.clipboardData?.getData('text/plain').replace(/\\D/g, '') ?? ''; // get a digit-only string\r\n if (!pastedInput) {\r\n return;\r\n }\r\n if (pastedInput.length >= 40) {\r\n const mfk_temp = toMfk(pastedInput);\r\n if (!areEqual(this.mfk, mfk_temp)) {\r\n this.mfk = mfk_temp;\r\n this.originalMfk = stringify(this.mfk);\r\n this.mfkChange.emit(this.mfk);\r\n }\r\n }\r\n }\r\n\r\n private originalMfk = '';\r\n onKeydown(e: KeyboardEvent) {\r\n this.originalMfk = stringify(this.mfk);\r\n const target = e.target as HTMLInputElement;\r\n const fieldName = target.name as keyof Mfk;\r\n\r\n // handle \"tab\" key --> auto fill '0's if the input field has not completed\r\n if (e.key === 'Tab') {\r\n if (target.readOnly) {\r\n return;\r\n }\r\n while (this.mfk[fieldName]!.length < target.maxLength) {\r\n this.mfk[fieldName] = this.mfk[fieldName]!.concat('0');\r\n }\r\n }\r\n\r\n // handle \"backspace\" key\r\n if ((e.key === 'Backspace' || e.code === 'Backspace') && this.mfk[fieldName]?.length === 0) {\r\n const currentInputFieldIndex = this._options.findIndex((o) => o.name === fieldName);\r\n // auto jump to the previous input field when current field is empty\r\n for (let i = currentInputFieldIndex - 1; i >= 0; i--) {\r\n if (this._options[i].readonly) {\r\n continue;\r\n }\r\n const prevInputField = this.mfkInputFields().find(\r\n (v) => v.el.nativeElement['name'] === this._options[i].name\r\n );\r\n prevInputField?.el.nativeElement.focus();\r\n break;\r\n }\r\n }\r\n }\r\n onKeyup(e: KeyboardEvent) {\r\n if (this.originalMfk !== stringify(this.mfk)) {\r\n this.mfkChange.emit(this.mfk);\r\n }\r\n\r\n if (isNaN(Number(e.key))) {\r\n return; // only numbers can trigger auto jump feature.\r\n }\r\n\r\n const target = e.target as HTMLInputElement;\r\n const fieldName = target.name as keyof Mfk;\r\n if (this.mfk[fieldName]?.length === target.maxLength) {\r\n // auto jump to the next input field when current field is full\r\n const currentInputFieldIndex = this._options.findIndex((o) => o.name === fieldName);\r\n for (let i = currentInputFieldIndex + 1; i < this._options.length; i++) {\r\n if (this._options[i].readonly) {\r\n continue;\r\n }\r\n const nextInputField = this.mfkInputFields().find(\r\n (v) => v.el.nativeElement['name'] === this._options[i].name\r\n );\r\n nextInputField?.el.nativeElement.focus();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private mergeOptions(options: MfkFieldOption[] = []): MfkFieldOption[] {\r\n const result: MfkFieldOption[] = [\r\n new MfkFieldOption(MfkFieldName.FUND),\r\n new MfkFieldOption(MfkFieldName.ORG),\r\n new MfkFieldOption(MfkFieldName.DEPT),\r\n new MfkFieldOption(MfkFieldName.SUBDEPT),\r\n new MfkFieldOption(MfkFieldName.GRANTPGM),\r\n new MfkFieldOption(MfkFieldName.IACT),\r\n new MfkFieldOption(MfkFieldName.OACT),\r\n new MfkFieldOption(MfkFieldName.DACT),\r\n new MfkFieldOption(MfkFieldName.FN),\r\n new MfkFieldOption(MfkFieldName.CCTR),\r\n ];\r\n if (options && options.length > 0) {\r\n for (const option of options) {\r\n const fieldOption = result.find((o) => o.name === option.name);\r\n if (fieldOption) {\r\n const index = result.indexOf(fieldOption);\r\n result[index] = option;\r\n } else {\r\n result.push(option);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n","<form id=\"{{ elementId }}\" name=\"{{ elementName }}\" [attr.name]=\"elementName\" class=\"mfk-container\">\r\n @for (op of _options; track $index) {\r\n <div class=\"mfk-field\">\r\n <label for=\"{{ elementId + op.name }}\">\r\n {{ op.label }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n id=\"{{ elementId + op.name }}\"\r\n name=\"{{ op.name }}\"\r\n [attr.name]=\"op.name\"\r\n [style.width.rem]=\"op.width\"\r\n [attr.aria-label]=\"op.name\"\r\n [attr.maxlength]=\"op.length\"\r\n [readOnly]=\"op.readonly\"\r\n [(ngModel)]=\"mfk[op.name]\"\r\n (paste)=\"paste($event)\"\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n inputmode=\"numeric\"\r\n pattern=\"[0-9]*\"\r\n digitOnly\r\n />\r\n </div>\r\n }\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { Mfk } from '../models/mfk';\r\n\r\n@Component({\r\n selector: 'uiowa-mfk-string',\r\n imports: [],\r\n template: ` @if(mfk(); as mfk){\r\n <span>\r\n <span>{{ mfk.fund }}</span>\r\n <span>-{{ mfk.org }}</span>\r\n <span>-{{ mfk.dept }}</span>\r\n <span>-{{ mfk.subdept }}</span>\r\n <span>-{{ mfk.grantpgm }}</span>\r\n <span>-{{ mfk.iact }}</span>\r\n <span>-{{ mfk.oact }}</span>\r\n <span>-{{ mfk.dact }}</span>\r\n <span>-{{ mfk.fn }}</span>\r\n <span>-{{ mfk.cctr }}</span>\r\n @if(mfk.brf){ <span>-{{ mfk.brf }}</span> }\r\n </span>\r\n }`,\r\n styles: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MfkString {\r\n mfk = input<Mfk>();\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Mfk } from '../models/mfk';\r\nimport { stringify } from '../models/mfk-tools';\r\n\r\n@Pipe({ name: 'mfkString' })\r\nexport class MfkStringPipe implements PipeTransform {\r\n transform(value: Mfk, ...args: unknown[]): string {\r\n return stringify(value);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Mfk } from '../models/mfk';\r\n\r\n@Pipe({ name: 'whoKeyString' })\r\nexport class WhoKeyStringPipe implements PipeTransform {\r\n transform(value: Mfk, ...args: unknown[]): string {\r\n if (!value) {\r\n return '';\r\n }\r\n return (\r\n value.fund +\r\n '-' +\r\n value.org +\r\n '-' +\r\n value.dept +\r\n '-' +\r\n value.subdept +\r\n '-' +\r\n value.grantpgm +\r\n '-' +\r\n value.fn\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of uiowa-mfk\r\n */\r\n\r\nexport * from './lib/mfk-input/mfk-input';\r\nexport * from './lib/mfk-string/mfk-string';\r\nexport * from './lib/models/mfk';\r\nexport * from './lib/models/mfk-field-name';\r\nexport * from './lib/models/mfk-field-option';\r\nexport * from './lib/models/mfk-tools';\r\nexport * from './lib/models/validated-mfk';\r\nexport * from './lib/pipes/mfk-string.pipe';\r\nexport * from './lib/pipes/who-key-string.pipe';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}