refactor(ivy): Implement computeStaticStyling (#34418)

The `computeStaticStyling` will be used for computing static styling value during `firstCreatePass`.

The function takes into account static styling from the template as well as from the host bindings. The host bindings need to be merged in front of the template so that they have the correct priority.

PR Closes #34418
This commit is contained in:
Misko Hevery
2019-12-15 21:09:02 -08:00
committed by Miško Hevery
parent 54af220107
commit b7ff38b1ef
13 changed files with 179 additions and 38 deletions

View File

@ -219,8 +219,10 @@ export function hyphenate(value: string): string {
* will copy over an initial styling values from the tNode (which are stored as a
* `StylingMapArray` on the `tNode.classes` or `tNode.styles` values).
*/
export function getStylingMapArray(value: TStylingContext | StylingMapArray | null):
export function getStylingMapArray(value: TStylingContext | StylingMapArray | string | null):
StylingMapArray|null {
// TODO(misko): remove after TNode.classes/styles becomes `string` only
if (typeof value === 'string') return null;
return isStylingContext(value) ?
(value as TStylingContext)[TStylingContextIndex.InitialStylingValuePosition] :
value as StylingMapArray;
@ -240,7 +242,10 @@ export function isStylingMapArray(value: any): boolean {
(typeof(value as StylingMapArray)[StylingMapArrayIndex.ValuesStartPosition] === 'string');
}
export function getInitialStylingValue(context: TStylingContext | StylingMapArray | null): string {
export function getInitialStylingValue(context: TStylingContext | StylingMapArray | string | null):
string {
// TODO(misko): remove after TNode.classes/styles becomes `string` only
if (typeof context === 'string') return context;
const map = getStylingMapArray(context);
return map && (map[StylingMapArrayIndex.RawValuePosition] as string | null) || '';
}