UNPKG

14.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"BaseComponent.js","sourceRoot":"../src/","sources":["BaseComponent.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D;;;;;;;GAOG;AACH;IAAgF,iCAA+B;IAoB7G;;;;OAIG;IACH,8DAA8D;IAC9D,uBAAY,KAAa,EAAE,OAAa;QAAxC,YACE,kBAAM,KAAK,EAAE,OAAO,CAAC,SAWtB;QATC,mDAAmD;QACnD,YAAY,CAAC,KAAI,EAAE,aAAa,CAAC,SAAS,EAAE;YAC1C,mBAAmB;YACnB,uBAAuB;YACvB,yBAAyB;YACzB,QAAQ;YACR,oBAAoB;YACpB,sBAAsB;SACvB,CAAC,CAAC;;IACL,CAAC;IAED;;OAEG;IACI,0CAAkB,GAAzB,UAA0B,SAAiB,EAAE,SAAiB;QAC5D,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,yCAAiB,GAAxB;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,4CAAoB,GAA3B;QACE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5D,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAEvC,IAAI,UAAU,CAAC,OAAO,EAAE;oBACtB,UAAU,CAAC,OAAO,EAAE,CAAC;iBACtB;aACF;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;IACH,CAAC;IAKD,sBAAW,oCAAS;QAHpB;;WAEG;aACH;YACE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,aAAa,GAAG,oBAAoB,CAAC;gBACzC,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAE9D,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE;YAED,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;;;OAAA;IAKD,sBAAc,uCAAY;QAH1B;;WAEG;aACH;YACE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;aACzB;YACD,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;;;OAAA;IAQD,sBAAc,iCAAM;QANpB;;;;;WAKG;aACH;YACE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtC;YAED,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;;;OAAA;IAQD,sBAAc,kCAAO;QANrB;;;;;WAKG;aACH;YACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACvC;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;;;OAAA;IAED;;;;;OAKG;IACO,mCAAW,GAArB,UAAsB,OAAe;QAArC,iBAaC;QAZC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,UAAC,GAAoB;gBAC9C,8DAA8D;gBAC9D,OAAO,CAAE,KAAY,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;YACxC,CAAC,CAAC;SACH;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACO,2CAAmB,GAA7B,UAA8B,YAAwB,EAAE,QAAyB;QAAzB,yBAAA,EAAA,aAAyB;QAC/E,+FAA+F;QAC/F,yFAAyF;QACzF,IAAI,YAAY,IAAI,QAAQ,IAAI,YAAY,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,EAAE;YACnF,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SACpD;IACH,CAAC;IAED;;;;;OAKG;IACO,yCAAiB,GAA3B,UAA4B,cAAoC;QAC9D,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACO,8CAAsB,GAAhC,UAAiC,oBAA0C;QACzE,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;OAMG;IACO,uDAA+B,GAAzC,UACE,aAAuB,EACvB,mBAA2B,EAC3B,SAAkB;QAElB,8BAA8B,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;IAC5G,CAAC;IAEO,wCAAgB,GAAxB,UACE,GAA0C,EAC1C,KAA2B;QAE3B,IAAI,CAAC,IAAI,CAAC,2BAA2B,IAAI,GAAG,EAAE;YAC5C,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC7B,GAAG,CAAC,KAAK,CAAC,CAAC;aACZ;YAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC3B,8DAA8D;gBAC7D,GAAW,CAAC,OAAO,GAAG,KAAK,CAAC;aAC9B;SACF;IACH,CAAC;IACH,oBAAC;AAAD,CAAC,AAhND,CAAgF,KAAK,CAAC,SAAS,GAgN9F;;AAED;;;;GAIG;AACH,mDAAmD;AACnD,SAAS,YAAY,CAAC,GAA0B,EAAE,SAAiB,EAAE,WAAqB;IACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QACtD,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;AACH,CAAC;AAED,mDAAmD;AACnD,SAAS,SAAS,CAAC,GAA0B,EAAE,SAAiB,EAAE,UAAkB;IAClF,uDAAuD;IACvD,IAAI,WAAW,GAAI,GAAW,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,eAAe,GAAI,SAAiB,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,WAAW,IAAI,eAAe,EAAE;QACjC,GAAW,CAAC,UAAU,CAAC,GAAG;YAAS,cAAc;iBAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;gBAAd,yBAAc;;YAChD,sDAAsD;YACtD,IAAI,MAAM,CAAC;YAEX,IAAI,eAAe,EAAE;gBACnB,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC5C;YACD,IAAI,WAAW,KAAK,eAAe,EAAE;gBACnC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACxC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;KACH;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import * as React from 'react';\nimport { Async } from './Async';\nimport { EventGroup } from './EventGroup';\nimport { IDisposable } from './IDisposable';\nimport { ISettingsMap } from './warn/warn';\nimport { warnConditionallyRequiredProps } from './warn/warnConditionallyRequiredProps';\nimport { warnMutuallyExclusive } from './warn/warnMutuallyExclusive';\nimport { warnDeprecations } from './warn/warnDeprecations';\nimport { IRefObject } from './createRef';\nimport { IBaseProps } from './BaseComponent.types';\n\n/**\n * BaseComponent class, which provides basic helpers for all components.\n *\n * @public\n * {@docCategory BaseComponent}\n *\n * @deprecated Do not use. We are moving away from class component.\n */\nexport class BaseComponent<TProps extends IBaseProps = {}, TState = {}> extends React.Component<TProps, TState> {\n /**\n * @deprecated Use React's error boundaries instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static onError: (errorMessage?: string, ex?: any) => void;\n\n /**\n * Controls whether the componentRef prop will be resolved by this component instance. If you are\n * implementing a passthrough (higher-order component), you would set this to false and pass through\n * the props to the inner component, allowing it to resolve the componentRef.\n */\n protected _skipComponentRefResolution: boolean;\n\n private __async: Async;\n private __events: EventGroup;\n private __disposables: IDisposable[] | null;\n private __resolves: { [name: string]: (ref: React.ReactNode) => React.ReactNode };\n private __className: string;\n\n /**\n * BaseComponent constructor\n * @param props - The props for the component.\n * @param context - The context for the component.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(props: TProps, context?: any) {\n super(props, context);\n\n // eslint-disable-next-line deprecation/deprecation\n _makeAllSafe(this, BaseComponent.prototype, [\n 'componentDidMount',\n 'shouldComponentUpdate',\n 'getSnapshotBeforeUpdate',\n 'render',\n 'componentDidUpdate',\n 'componentWillUnmount',\n ]);\n }\n\n /**\n * When the component receives props, make sure the componentRef is updated.\n */\n public componentDidUpdate(prevProps: TProps, prevState: TState): void {\n this._updateComponentRef(prevProps, this.props);\n }\n\n /**\n * When the component has mounted, update the componentRef.\n */\n public componentDidMount(): void {\n this._setComponentRef(this.props.componentRef, this);\n }\n\n /**\n * If we have disposables, dispose them automatically on unmount.\n */\n public componentWillUnmount(): void {\n this._setComponentRef(this.props.componentRef, null);\n\n if (this.__disposables) {\n for (let i = 0, len = this._disposables.length; i < len; i++) {\n let disposable = this.__disposables[i];\n\n if (disposable.dispose) {\n disposable.dispose();\n }\n }\n this.__disposables = null;\n }\n }\n\n /**\n * Gets the object's class name.\n */\n public get className(): string {\n if (!this.__className) {\n let funcNameRegex = /function (.{1,})\\(/;\n let results = funcNameRegex.exec(this.constructor.toString());\n\n this.__className = results && results.length > 1 ? results[1] : '';\n }\n\n return this.__className;\n }\n\n /**\n * Allows subclasses to push things to this._disposables to be auto disposed.\n */\n protected get _disposables(): IDisposable[] {\n if (!this.__disposables) {\n this.__disposables = [];\n }\n return this.__disposables;\n }\n\n /**\n * Gets the async instance associated with the component, created on demand. The async instance gives\n * subclasses a way to execute setTimeout/setInterval async calls safely, where the callbacks\n * will be cleared/ignored automatically after unmounting. The helpers within the async object also\n * preserve the this pointer so that you don't need to \"bind\" the callbacks.\n */\n protected get _async(): Async {\n if (!this.__async) {\n this.__async = new Async(this);\n this._disposables.push(this.__async);\n }\n\n return this.__async;\n }\n\n /**\n * Gets the event group instance assocaited with the component, created on demand. The event instance\n * provides on/off methods for listening to DOM (or regular javascript object) events. The event callbacks\n * will be automatically disconnected after unmounting. The helpers within the events object also\n * preserve the this reference so that you don't need to \"bind\" the callbacks.\n */\n protected get _events(): EventGroup {\n if (!this.__events) {\n this.__events = new EventGroup(this);\n this._disposables.push(this.__events);\n }\n\n return this.__events;\n }\n\n /**\n * Helper to return a memoized ref resolver function.\n * @param refName - Name of the member to assign the ref to.\n * @returns A function instance keyed from the given refname.\n * @deprecated Use `createRef` from React.createRef.\n */\n protected _resolveRef(refName: string): (ref: React.ReactNode) => React.ReactNode {\n if (!this.__resolves) {\n this.__resolves = {};\n }\n\n if (!this.__resolves[refName]) {\n this.__resolves[refName] = (ref: React.ReactNode) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return ((this as any)[refName] = ref);\n };\n }\n\n return this.__resolves[refName];\n }\n\n /**\n * Updates the componentRef (by calling it with \"this\" when necessary.)\n */\n protected _updateComponentRef(currentProps: IBaseProps, newProps: IBaseProps = {}): void {\n // currentProps *should* always be defined, but verify that just in case a subclass is manually\n // calling a lifecycle method with no parameters (which has happened) or other odd usage.\n if (currentProps && newProps && currentProps.componentRef !== newProps.componentRef) {\n this._setComponentRef(currentProps.componentRef, null);\n this._setComponentRef(newProps.componentRef, this);\n }\n }\n\n /**\n * Warns when a deprecated props are being used.\n *\n * @param deprecationMap - The map of deprecations, where key is the prop name and the value is\n * either null or a replacement prop name.\n */\n protected _warnDeprecations(deprecationMap: ISettingsMap<TProps>): void {\n warnDeprecations(this.className, this.props, deprecationMap);\n }\n\n /**\n * Warns when props which are mutually exclusive with each other are both used.\n *\n * @param mutuallyExclusiveMap - The map of mutually exclusive props.\n */\n protected _warnMutuallyExclusive(mutuallyExclusiveMap: ISettingsMap<TProps>): void {\n warnMutuallyExclusive(this.className, this.props, mutuallyExclusiveMap);\n }\n\n /**\n * Warns when props are required if a condition is met.\n *\n * @param requiredProps - The name of the props that are required when the condition is met.\n * @param conditionalPropName - The name of the prop that the condition is based on.\n * @param condition - Whether the condition is met.\n */\n protected _warnConditionallyRequiredProps(\n requiredProps: string[],\n conditionalPropName: string,\n condition: boolean,\n ): void {\n warnConditionallyRequiredProps(this.className, this.props, requiredProps, conditionalPropName, condition);\n }\n\n private _setComponentRef<TRefInterface>(\n ref: IRefObject<TRefInterface> | undefined,\n value: TRefInterface | null,\n ): void {\n if (!this._skipComponentRefResolution && ref) {\n if (typeof ref === 'function') {\n ref(value);\n }\n\n if (typeof ref === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (ref as any).current = value;\n }\n }\n }\n}\n\n/**\n * Helper to override a given method with a wrapper method that can try/catch the original, but also\n * ensures that the BaseComponent's methods are called before the subclass's. This ensures that\n * componentWillUnmount in the base is called and that things in the _disposables array are disposed.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction _makeAllSafe(obj: BaseComponent<{}, {}>, prototype: Object, methodNames: string[]): void {\n for (let i = 0, len = methodNames.length; i < len; i++) {\n _makeSafe(obj, prototype, methodNames[i]);\n }\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction _makeSafe(obj: BaseComponent<{}, {}>, prototype: Object, methodName: string): void {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n let classMethod = (obj as any)[methodName];\n let prototypeMethod = (prototype as any)[methodName];\n\n if (classMethod || prototypeMethod) {\n (obj as any)[methodName] = function(...args: any[]): any {\n /* eslint-enable @typescript-eslint/no-explicit-any */\n let retVal;\n\n if (prototypeMethod) {\n retVal = prototypeMethod.apply(this, args);\n }\n if (classMethod !== prototypeMethod) {\n retVal = classMethod.apply(this, args);\n }\n\n return retVal;\n };\n }\n}\n\n/**\n * Simple constant function for returning null, used to render empty templates in JSX.\n *\n * @public\n */\nexport function nullRender(): JSX.Element | null {\n return null;\n}\n"]}
\No newline at end of file