UNPKG

@adyen/adyen-platform-experience-web

Version:

![Platform Experience header](https://github.com/Adyen/adyen-platform-experience-web/assets/7926613/18094965-9e01-450e-8dc9-ea84e6b22c2b)

288 lines (287 loc) 9.52 kB
import { resolveTimeFrameBlockSize as D, downsizeTimeFrame as F } from "../common/utils.js"; import b, { UNBOUNDED_SLICE as d } from "../../timeslice/index.js"; import { computeTimestampOffset as x } from "../../utils.js"; import { FIRST_WEEK_DAYS as L, DAY_MS as k, SHIFT_FRAME as g, SHIFT_PERIOD as U, SHIFT_BLOCK as N, CURSOR_NEXT_BLOCK as w, CURSOR_PREV_BLOCK as z, CURSOR_LINE_END as W, CURSOR_LINE_START as M, CURSOR_BLOCK_END as H, CURSOR_BLOCK_START as K, CURSOR_DOWNWARD as v, CURSOR_UPWARD as Y, CURSOR_FORWARD as V, CURSOR_BACKWARD as X, SELECTION_COLLAPSE as j, SELECTION_NEAREST as T, SELECTION_FARTHEST as I, SELECTION_TO as B, SELECTION_FROM as S } from "../../constants.js"; import q from "../common/flags.js"; import { BASE_LOCALE as G } from "../../../../../../core/Localization/datetime/restamper/constants.js"; import E from "../../../../../../primitives/time/today/main.js"; import { createIndexed as c } from "../../../../../../primitives/auxiliary/indexed/main.js"; import { isUndefined as l, isNullish as m, isBoolean as C, isFunction as J } from "../../../../../../utils/value/is.js"; import { isInfinity as p, clamp as O, mid as P, isBitSafeInteger as R, mod as Q } from "../../../../../../utils/value/number.js"; import { enumerable as a } from "../../../../../../utils/struct/property.js"; import { struct as Z } from "../../../../../../utils/struct/main.js"; class u { static #O = G; #e = 0; #S; #E; #C = -1; #R = -1; #n; #h; #m; #F = !1; #k; #T = 0; #d = []; #o = u.#O; #y = 12; #i; #t; #s = 1; #I; #f; #g; #B = E(); #a; #A = -1 / 0; #_ = 1 / 0; #l = -1 / 0; #c = 1 / 0; #D = 1 / 0; #b = 0; daysInWeek = 0; origin; originTimestamp; #L = c(() => this.daysInWeek, this.getDayOfWeekAtIndex.bind(this)); #U = c(() => this.#s, this.#z.bind(this)); get fromTimestamp() { return this.#A; } get toTimestamp() { return this.#_; } get numberOfBlocks() { return this.#D; } get blankSelection() { return this.#i === this.#t && l(this.#t); } get cursor() { return this.#n ?? -1; } get daysOfWeek() { return this.#L; } get dynamicBlockHeight() { return this.#F; } set dynamicBlockHeight(t) { m(t) ? this.#F = !!t : C(t) && (this.#F = t); } set effect(t) { m(t) ? this.#k = void 0 : J(t) && (this.#k = t); } get firstWeekDay() { return this.#T; } set firstWeekDay(t) { if (m(t)) this.firstWeekDay = 0; else if (!L.includes(t) || this.#T === (this.#T = t)) return; } get frameBlocks() { return this.#U; } get isAtEnd() { return !p(this.#c) && this.#c === this.#s - 1; } get isAtStart() { return !p(this.#l) && this.#l === 0; } get locale() { return this.#o; } set locale(t) { const s = this.#o; if (m(t)) this.#o = u.#O; else if (typeof Intl < "u") try { this.#o = new Intl.Locale(t).toString(); } catch { this.#o = u.#O; } this.#o !== s && this.refreshFrame(!0); } get selectionStart() { return this.#i; } get selectionEnd() { return this.#t; } get size() { return this.#s; } set size(t) { const s = Math.min(!m(t) && D(t) || 1, this.#y); this.#s !== (this.#s = s) && (this.#x(), this.refreshFrame()); } get timeslice() { return this.#f; } set timeslice(t) { if (t === this.#I || m(t) && this.#I === d) return; const { from: s, to: i, timezone: h } = this.#I = t ?? d; this.#f = b(s, i), this.timezone = h; } get timezone() { return this.#g; } set timezone(t) { this.#f.timezone = t, this.#g = this.#f.timezone, this.#B = E(this.#g), this.#a && (this.#a(), this.#a = this.#B.subscribe(this.refreshFrame.bind(this, !0))), this.#N(); } set trackCurrentDay(t) { C(t) ? t && !this.#a ? this.#a = this.#B.subscribe(this.refreshFrame.bind(this, !0)) : !t && this.#a && (this.#a(), this.#a = void 0) : m(t) && (this.trackCurrentDay = !1); } get units() { return this.#b; } #N() { const { from: t, to: s, span: i, offsets: h } = this.#f; this.#A = t - h.from, this.#_ = s - h.to, this.#D = i; const e = l(this.#i) ? this.#i : Math.max(this.#i, t), r = l(this.#t) ? this.#t : Math.min(this.#t, s); e === this.#i || r === this.#t ? (this.#i = e, this.#t = r) : this.#i = this.#t = void 0, this.reslice(), this.#y = F(12, this.numberOfBlocks), this.#s = F(this.#s, this.numberOfBlocks), this.shiftFrameToTimestamp(this.#m); } #w(t) { return O(this.#l, t || 0, this.#c - this.#s + 1); } #u(t, s = !0) { let i = new Date(t).getTime(); if (isNaN(i)) return this.#u(Date.now()); const { from: h, to: e } = this.#f, r = O(h, i, e); r !== i && s ? (i = P(h, e), (isNaN(i) || p(i)) && (i = r)) : i = r; const n = x(i, this.#g); return [i - n, n]; } #z(t) { if (R(t) && t >= 0 && t < this.#s) { if (!this.#d[t]) { const s = this.getFrameBlockAtIndex(t); if (!s) return; const [i, h] = this.getFormattedDataForFrameBlock(s[s.inner.from][0] + k / 2), e = s.outer.from; this.#d[t] = c( { datetime: a(h), label: a(i), length: a(Math.ceil(s.outer.units / this.rowspan)), month: a(s.month), year: a(s.year) }, (r) => { const n = r * this.rowspan; return c(this.rowspan, (f) => { const [o, y] = s[f + n], [A, _] = this.getFormattedDataForBlockCell(o + k / 2); return Z({ datetime: a(_), flags: a(q(y)), index: a(e + f + n), label: a(A), timestamp: a(o) }); }); } ); } return this.#d[t]; } } #r(t) { t !== 0 && (this.#h += t, this.refreshFrame()); } #p(t) { const s = this.#w(t); s && (this.shiftOrigin(s), this.#l -= s, this.#c -= s, this.#e = Q(this.#e - s, this.#s), this.refreshFrame()); } #x() { const t = this.#s - 1, s = Math.min(t - this.origin % this.#s, this.#c) - t; s && this.#p(s); } initialize() { this.timeslice = d; } refreshFrame(t = !1) { if (this.#d.length = 0, !(l(this.#h) || t)) { const s = this.getFrameBlockAtIndex(this.#e), { from: i, to: h } = s.inner, [e] = this.#u(this.getTimestampAtIndex(i + this.#h), !1); this.#h = this.getUnitsOffsetForTimestamp(this.getTimestampAtIndex(i), e); const r = i + this.#h, n = O(i, r, h); if (n > r) return this.#h = this.getUnitsForFrameBlockAtIndex(--this.#e) + r - n, this.#e >= 0 ? this.refreshFrame() : (this.#e = this.#s - 1, this.shiftFrameByOffset(-1, g)); if (n < r) return this.#h = r - n - 1, ++this.#e < this.#s ? this.refreshFrame() : (this.#e = 0, this.shiftFrameByOffset(1, g)); this.#S = i, this.#E = h, this.#m = this.#u(this.getTimestampAtIndex(r), !1)[0], this.#h = this.getCursorBlockOriginTimestampOffset(this.#m), this.#n = i + this.#h; const f = this.#e > 0 ? this.getFrameBlockAtIndex(0) : s, o = this.#e < this.#s - 1 ? this.getFrameBlockAtIndex(this.#s - 1) : s; this.#C = f.inner.from, this.#R = o.inner.to, this.#b = o.outer.to + 1; } this.withCurrentDayTimestamp(), this.#k?.(); } shiftFrameByOffset(t, s) { if (t && R(t)) switch (s) { case N: return this.#p(t); case U: return this.#p(t * 12); case g: default: return this.#p(t * this.#s); } } shiftFrameCursor(t) { switch (t) { case X: return this.#r(-1); case V: return this.#r(1); case Y: return this.#r(-this.rowspan); case v: return this.#r(this.rowspan); case K: return this.#r(this.#S - this.#n); case H: return this.#r(this.#E - this.#n); case M: return this.#r(-(this.#n % this.rowspan)); case W: return this.#r(this.rowspan - (this.#n % this.rowspan + 1)); case z: return this.#r(-this.getUnitsForFrameBlockAtIndex((this.#e ?? 0) - 1)); case w: return this.#r(this.getUnitsForFrameBlockAtIndex(this.#e ?? 0)); } if (!(t < 0) && t >= this.#C && t <= this.#R) return this.#r(t - this.#n); } shiftFrameToTimestamp(t) { this.#m = this.originTimestamp = this.#u(t, !1).reduce((s, i) => s + i), this.#h = this.getCursorBlockOriginTimestampOffset(this.#m), this.reoriginate(), [this.#l, this.#c] = this.getEdgeBlockOffsetsFromOrigin(), this.#x(), this.refreshFrame(), this.#r(this.getUnitsOffsetForTimestamp(this.getTimestampAtIndex(this.#n), this.#m)); } clearSelection() { this.blankSelection || (this.#i = this.#t = void 0, this.refreshFrame(!0)); } updateSelection(t, s) { const i = this.#i, h = this.#t, e = this.#u(t, !1).reduce((r, n) => r + n); switch (s === I && (e <= i ? s = B : e >= h && (s = S)), s) { case S: this.#i = e, this.#t = Math.max(this.#i, h ?? e); break; case B: this.#t = e, this.#i = Math.min(i ?? e, this.#t); break; case I: case T: { let r = Math.abs(e - (i ?? e)), n = Math.abs(e - (h ?? e)); s === T && ([r, n] = [n, r]), r > n ? this.#i = e : this.#t = e; break; } case j: default: this.#i = this.#t = e; break; } (this.#i !== i || this.#t !== h) && this.refreshFrame(!0); } } export { u as default };