const app = require('../app') const moment = require('moment-immutable') const { editIcon, calculatedIcon, dollarIcon } = require('../assets') const _ = require('lodash') app.component('appLaborEntryPage', { template: html`

For week of {{ctrl.startDate.format('LL')}} to {{ctrl.endDate.format('LL')}}

This field is calculated,
and cannot be edited directly.
Save your changes to update.
This field is calculated,
and cannot be edited directly.
Save your changes to update.
Staff Member {{::weekday.min}} {{::weekday.date.format('M/DD')}} {{::weekday.short}} {{::weekday.date.format('M/DD')}} {{::weekday.name}}
{{::weekday.date.format('L')}}
{{ctrl.staffMembers[sfl.id].name}}
Submit
`, controllerAs: 'ctrl', controller: function(api, $routeParams, weekdays, $mdToast) { this.terminalKey = $routeParams.terminal const week = moment($routeParams.week) if (!week.isSame(week.startOf('week'))) throw new Error('Date is not start of week') this.startDate = week this.endDate = week.endOf('week') this.weekdays = weekdays.map(d => Object.assign({}, d, {date: week.add(d.value, 'days')})) api.staffMemberDictionary().then(staffMembers => { this.staffMembers = staffMembers }) const load = () => { this.promise = api.get(`/api/labor/${$routeParams.terminal}/${$routeParams.week}`).then((model) => { this.model = model const staffMemberIds = this.model.workdays[0].labor.map(x => x.staffMemberId) this.staffMemberLabor = staffMemberIds.map((id, i) => ({ id, days: this.model.workdays.map(wd => wd.labor[i]) })) this.saved = _.cloneDeep(this.staffMemberLabor) }) } load() let saveTimer = null this.save = async (delay, then) => { if (saveTimer) { clearTimeout(saveTimer) } const model = { workweek: this.model.workweek, workdays: this.model.workdays.map(workday => ({ labor: workday.labor.map(labor => ({ staffMemberId: labor.staffMemberId, hours: labor.hours || null })) })) } const saved = _.cloneDeep(this.staffMemberLabor) saveTimer = setTimeout(async () => { saveTimer = null try { await api.patch(`/api/labor/${$routeParams.terminal}/${$routeParams.week}`, model) $mdToast.showSimple('Labor saved.') this.saved = saved if (then) { then() } } catch (err) { window.err = err console.error(err) $mdToast.showSimple(`Could not save Labor: ${err.message || err.statusText || err}`) } }, delay || 0) } this.submit = () => this.save(0, load) this.keypress = async ($event) => { if ($event.key === 'Enter') { const tabIndex = +$event.srcElement.getAttribute('tabindex') + 1 const nextElement = document.querySelector(`[tabindex="${tabIndex}"]`) if (nextElement) { $event.returnValue = false nextElement.focus() nextElement.select && nextElement.select() } await this.save(2000) } } } })