Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
arshaw committed Nov 9, 2020
1 parent 2163fe7 commit c265b7e
Show file tree
Hide file tree
Showing 30 changed files with 292 additions and 174 deletions.
5 changes: 5 additions & 0 deletions .eslintrc.yml
Expand Up @@ -8,7 +8,9 @@
'@typescript-eslint/lines-between-class-members':
- error
- exceptAfterSingleLine: true
'@typescript-eslint/naming-convention': off # TODO: reenable
'@typescript-eslint/no-unused-vars': off # TODO: reenable
'@typescript-eslint/no-unused-expressions': off # TODO: reenable
'@typescript-eslint/no-use-before-define':
- error
- variables: true
Expand All @@ -20,6 +22,7 @@
class-methods-use-this:
- off
default-case: off
function-paren-newline: off # TODO: really tripping up. REENABLE
guard-for-in: off # TODO: reenable
import/no-cycle: off # TODO: reenable. disabled because circular deps are hard to fix right now
import/prefer-default-export: off # named exports much better for .d.ts files
Expand Down Expand Up @@ -49,6 +52,8 @@
multiline: true
operator-linebreak: off # prevents JSX if statements looking correct. REVISIT for other uses
prefer-const: off # TODO: revisit
prefer-destructuring: off # is too aggressive, sometimes doesn't make sense
prefer-template: off
react/destructuring-assignment: off
react/jsx-props-no-spreading: off # more acceptable in preact, b/c no proptype filtering
react/react-in-jsx-scope: off # because we use preact
Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/CalendarContent.tsx
Expand Up @@ -24,7 +24,7 @@ import { EventClicking } from './interactions/EventClicking'
import { EventHovering } from './interactions/EventHovering'
import { getNow } from './reducers/current-date'
import { CalendarInteraction } from './calendar-utils'
import { DelayedRunner } from './util/runner'
import { DelayedRunner } from './util/DelayedRunner'
import { PureComponent } from './vdom-util'

export interface CalendarContentProps extends CalendarData {
Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/common/render-hook.tsx
Expand Up @@ -218,7 +218,7 @@ export function buildClassNameNormalizer<HookProps>() { // TODO: general deep-me
let currentHookProps: HookProps
let currentClassNames: string[] = []

return function (generator: ClassNamesGenerator<HookProps>, hookProps: HookProps) {
return (generator: ClassNamesGenerator<HookProps>, hookProps: HookProps) => {
if (!currentHookProps || !isPropsEqual(currentHookProps, hookProps) || generator !== currentGenerator) {
currentGenerator = generator
currentHookProps = hookProps
Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/component/event-splitting.ts
Expand Up @@ -139,7 +139,7 @@ export abstract class Splitter<PropsType extends SplittableProps = SplittablePro
let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents)
let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId)

let populate = function (key) {
let populate = (key) => {
if (!splitStates[key]) {
splitStates[key] = {
affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,
Expand Down
7 changes: 6 additions & 1 deletion packages/common/src/datelib/DateFormatter.ts
Expand Up @@ -12,7 +12,12 @@ export interface VerboseFormattingArg { // TODO: kill this
defaultSeparator: string
}

export function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string): VerboseFormattingArg {
export function createVerboseFormattingArg(
start: ZonedMarker,
end: ZonedMarker,
context: DateFormattingContext,
betterDefaultSeparator?: string,
): VerboseFormattingArg {
let startInfo = expandZonedMarker(start, context.calendarSystem)
let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null

Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/datelib/formatting-native.ts
Expand Up @@ -181,7 +181,7 @@ function buildNativeFormattingFunc(
zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps)
}

return function (date: ZonedMarker) {
return (date: ZonedMarker) => {
let { marker } = date
let format

Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/interactions/interaction.ts
Expand Up @@ -42,4 +42,4 @@ export function interactionSettingsToStore(settings: InteractionSettings) {
}

// global state
export let interactionSettingsStore: InteractionSettingsStore = {}
export const interactionSettingsStore: InteractionSettingsStore = {}
10 changes: 8 additions & 2 deletions packages/common/src/main.ts
Expand Up @@ -218,9 +218,15 @@ export { requestJson } from './util/requestJson'

export * from './vdom'
export { BaseComponent, setRef } from './vdom-util'
export { DelayedRunner } from './util/runner'
export { DelayedRunner } from './util/DelayedRunner'

export { ScrollGridProps, ScrollGridSectionConfig, ColGroupConfig, ScrollGridImpl, ScrollGridChunkConfig } from './scrollgrid/ScrollGridImpl'
export {
ScrollGridProps,
ScrollGridSectionConfig,
ColGroupConfig,
ScrollGridImpl,
ScrollGridChunkConfig,
} from './scrollgrid/ScrollGridImpl'
export { SimpleScrollGrid, SimpleScrollGridSection } from './scrollgrid/SimpleScrollGrid'
export {
CssDimValue, ScrollerLike, SectionConfig, ColProps, ChunkConfig, hasShrinkWidth, renderMicroColGroup,
Expand Down
8 changes: 7 additions & 1 deletion packages/common/src/options.ts
Expand Up @@ -402,7 +402,13 @@ export function mergeRawOptions(optionSets: Dictionary[]) {
return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS)
}

export function refineProps<Refiners extends GenericRefiners, Raw extends RawOptionsFromRefiners<Refiners>>(input: Raw, refiners: Refiners): { refined: RefinedOptionsFromRefiners<Refiners>, extra: Dictionary } {
export function refineProps<Refiners extends GenericRefiners, Raw extends RawOptionsFromRefiners<Refiners>>(
input: Raw,
refiners: Refiners,
): {
refined: RefinedOptionsFromRefiners<Refiners>,
extra: Dictionary,
} {
let refined = {} as any
let extra = {} as any

Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/plugin-system.ts
Expand Up @@ -106,7 +106,7 @@ export function buildBuildPluginHooks() { // memoizes
let currentGlobalDefs: PluginDef[] = []
let currentHooks: PluginHooks

return function (overrideDefs: PluginDef[], globalDefs: PluginDef[]) {
return (overrideDefs: PluginDef[], globalDefs: PluginDef[]) => {
if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
currentHooks = buildPluginHooks(overrideDefs, globalDefs)
}
Expand Down
78 changes: 50 additions & 28 deletions packages/common/src/reducers/CalendarDataManager.ts
Expand Up @@ -40,7 +40,7 @@ import { globalPlugins } from '../global-plugins'
import { createEmptyEventStore } from '../structs/event-store'
import { CalendarContext } from '../CalendarContext'
import { CalendarDataManagerState, CalendarOptionsData, CalendarCurrentViewData, CalendarData } from './data-types'
import { TaskRunner } from '../util/runner'
import { TaskRunner } from '../util/TaskRunner'
import { buildTitle } from './title-formatting'

export interface CalendarDataManagerProps {
Expand Down Expand Up @@ -340,7 +340,11 @@ export class CalendarDataManager {
}
}

_computeOptionsData(optionOverrides: CalendarOptions, dynamicOptionOverrides: CalendarOptions, calendarApi: CalendarApi): CalendarOptionsData {
_computeOptionsData(
optionOverrides: CalendarOptions,
dynamicOptionOverrides: CalendarOptions,
calendarApi: CalendarApi,
): CalendarOptionsData {
// TODO: blacklist options that are handled by optionChangeHandlers

let {
Expand Down Expand Up @@ -411,7 +415,11 @@ export class CalendarDataManager {
if (optionName !== 'plugins') { // because plugins is special-cased
if (
raw[optionName] === currentRaw[optionName] ||
(COMPLEX_OPTION_COMPARATORS[optionName] && (optionName in currentRaw) && COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))
(
COMPLEX_OPTION_COMPARATORS[optionName] &&
(optionName in currentRaw) &&
COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName])
)
) {
refined[optionName] = currentRefined[optionName]
} else if (refiners[optionName]) {
Expand All @@ -438,7 +446,12 @@ export class CalendarDataManager {
}
}

_computeCurrentViewData(viewType: string, optionsData: CalendarOptionsData, optionOverrides: CalendarOptions, dynamicOptionOverrides: CalendarOptions): CalendarCurrentViewData {
_computeCurrentViewData(
viewType: string,
optionsData: CalendarOptionsData,
optionOverrides: CalendarOptions,
dynamicOptionOverrides: CalendarOptions,
): CalendarCurrentViewData {
let viewSpec = optionsData.viewSpecs[viewType]

if (!viewSpec) {
Expand Down Expand Up @@ -482,7 +495,13 @@ export class CalendarDataManager {
return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi }
}

processRawViewOptions(viewSpec: ViewSpec, pluginHooks: PluginHooks, localeDefaults: CalendarOptions, optionOverrides: CalendarOptions, dynamicOptionOverrides: CalendarOptions) {
processRawViewOptions(
viewSpec: ViewSpec,
pluginHooks: PluginHooks,
localeDefaults: CalendarOptions,
optionOverrides: CalendarOptions,
dynamicOptionOverrides: CalendarOptions,
) {
let raw = mergeRawOptions([
BASE_OPTION_DEFAULTS,
viewSpec.optionDefaults,
Expand Down Expand Up @@ -599,40 +618,43 @@ function buildViewUiProps(calendarContext: CalendarContext) {
let { options } = calendarContext

return {
eventUiSingleBase: createEventUi({
display: options.eventDisplay,
editable: options.editable, // without "event" at start
startEditable: options.eventStartEditable,
durationEditable: options.eventDurationEditable,
constraint: options.eventConstraint,
overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,
allow: options.eventAllow,
backgroundColor: options.eventBackgroundColor,
borderColor: options.eventBorderColor,
textColor: options.eventTextColor,
color: options.eventColor
// classNames: options.eventClassNames // render hook will handle this
}, calendarContext),

selectionConfig: createEventUi({
constraint: options.selectConstraint,
overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
allow: options.selectAllow
}, calendarContext)
eventUiSingleBase: createEventUi(
{
display: options.eventDisplay,
editable: options.editable, // without "event" at start
startEditable: options.eventStartEditable,
durationEditable: options.eventDurationEditable,
constraint: options.eventConstraint,
overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,
allow: options.eventAllow,
backgroundColor: options.eventBackgroundColor,
borderColor: options.eventBorderColor,
textColor: options.eventTextColor,
color: options.eventColor,
// classNames: options.eventClassNames // render hook will handle this
},
calendarContext,
),
selectionConfig: createEventUi(
{
constraint: options.selectConstraint,
overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
allow: options.selectAllow,
},
calendarContext,
),
}
}


function parseContextBusinessHours(calendarContext: CalendarContext) {
return parseBusinessHours(calendarContext.options.businessHours, calendarContext)
}


function warnUnknownOptions(options: any, viewName?: string) {
for (let optionName in options) {
console.warn(
`Unknown option '${optionName}'` +
(viewName ? ` for view '${viewName}'` : '')
(viewName ? ` for view '${viewName}'` : ''),
)
}
}
14 changes: 10 additions & 4 deletions packages/common/src/reducers/eventStore.ts
Expand Up @@ -18,7 +18,13 @@ import { DateEnv } from '../datelib/env'
import { CalendarContext } from '../CalendarContext'
import { expandRecurring } from '../structs/recurring-event'

export function reduceEventStore(eventStore: EventStore, action: Action, eventSources: EventSourceHash, dateProfile: DateProfile, context: CalendarContext): EventStore {
export function reduceEventStore(
eventStore: EventStore,
action: Action,
eventSources: EventSourceHash,
dateProfile: DateProfile,
context: CalendarContext,
): EventStore {
switch (action.type) {
case 'RECEIVE_EVENTS': // raw
return receiveRawEvents(
Expand Down Expand Up @@ -57,9 +63,9 @@ export function reduceEventStore(eventStore: EventStore, action: Action, eventSo
return excludeEventsBySourceId(eventStore, action.sourceId)

case 'REMOVE_ALL_EVENT_SOURCES':
return filterEventStoreDefs(eventStore, function(eventDef: EventDef) {
return !eventDef.sourceId // only keep events with no source id
})
return filterEventStoreDefs(eventStore, (eventDef: EventDef) => (
!eventDef.sourceId // only keep events with no source id
))

case 'REMOVE_ALL_EVENTS':
return createEmptyEventStore()
Expand Down
2 changes: 1 addition & 1 deletion packages/common/src/reducers/view-type.ts
Expand Up @@ -3,7 +3,7 @@ import { Action } from './Action'
export function reduceViewType(viewType: string, action: Action): string {
switch (action.type) {
case 'CHANGE_VIEW_TYPE':
return viewType = action.viewType
viewType = action.viewType
}

return viewType
Expand Down
5 changes: 4 additions & 1 deletion packages/common/src/scrollgrid/SimpleScrollGrid.tsx
Expand Up @@ -33,7 +33,10 @@ interface SimpleScrollGridState {

export class SimpleScrollGrid extends BaseComponent<SimpleScrollGridProps, SimpleScrollGridState> {
processCols = memoize((a) => a, isColPropsEqual) // so we get same `cols` props every time
renderMicroColGroup: typeof renderMicroColGroup = memoize(renderMicroColGroup) // yucky to memoize VNodes, but much more efficient for consumers

// yucky to memoize VNodes, but much more efficient for consumers
renderMicroColGroup: typeof renderMicroColGroup = memoize(renderMicroColGroup)

scrollerRefs = new RefMap<Scroller>()
scrollerElRefs = new RefMap<HTMLElement>(this._handleScrollerEl.bind(this))

Expand Down
18 changes: 16 additions & 2 deletions packages/common/src/structs/event-parse.ts
Expand Up @@ -71,7 +71,14 @@ export function parseEvent(
)

if (recurringRes) {
let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context)
let def = parseEventDef(
refined,
extra,
eventSource ? eventSource.sourceId : '',
recurringRes.allDay,
Boolean(recurringRes.duration),
context,
)

def.recurringDef = { // don't want all the props from recurringRes. TODO: more efficient way to do this
typeId: recurringRes.typeId,
Expand Down Expand Up @@ -105,7 +112,14 @@ export function buildEventRefiners(context: CalendarContext) {
Will NOT populate extendedProps with the leftover properties.
Will NOT populate date-related props.
*/
export function parseEventDef(refined: EventRefined, extra: Dictionary, sourceId: string, allDay: boolean, hasEnd: boolean, context: CalendarContext): EventDef {
export function parseEventDef(
refined: EventRefined,
extra: Dictionary,
sourceId: string,
allDay: boolean,
hasEnd: boolean,
context: CalendarContext,
): EventDef {
let def: EventDef = {
title: refined.title || '',
groupId: refined.groupId || '',
Expand Down
6 changes: 3 additions & 3 deletions packages/common/src/structs/event-store.ts
Expand Up @@ -86,9 +86,9 @@ export function mergeEventStores(store0: EventStore, store1: EventStore): EventS

export function filterEventStoreDefs(eventStore: EventStore, filterFunc: (eventDef: EventDef) => boolean): EventStore {
let defs = filterHash(eventStore.defs, filterFunc)
let instances = filterHash(eventStore.instances, function(instance: EventInstance) {
return defs[instance.defId] // still exists?
})
let instances = filterHash(eventStore.instances, (instance: EventInstance) => (
defs[instance.defId] // still exists?
))
return { defs, instances }
}

Expand Down

0 comments on commit c265b7e

Please sign in to comment.