1
1
/* @flow */
2
- import type { SJSymbolInstanceLayer , SJLayer , SJObjectId } from 'sketchapp-json-flow-types' ;
2
+ // import type { SJSymbolInstanceLayer, SJLayer, SJObjectId } from 'sketchapp-json-flow-types';
3
3
import SketchRenderer from './SketchRenderer' ;
4
- import { makeSymbolInstance , makeRect , makeJSONDataReference } from '../jsonUtils/models' ;
4
+ import {
5
+ makeSymbolInstance ,
6
+ makeRect ,
7
+ makeJSONDataReference ,
8
+ } from '../jsonUtils/models' ;
5
9
import type { ViewStyle , LayoutInfo , TextStyle } from '../types' ;
6
10
import { getSymbolMasterByName , getSymbolMasterById } from '../symbol' ;
7
11
import { makeImageDataFromUrl } from '../jsonUtils/hacksForJSONImpl' ;
8
12
9
- type OverrideReferenceBase = {
10
- objectId : SJObjectId ,
11
- name : string
12
- } ;
13
-
14
- type OverrideReference =
15
- | ( { type : 'text' } & OverrideReferenceBase )
16
- | ( { type : 'image' } & OverrideReferenceBase )
17
- | ( {
18
- type : 'symbolInstance' ,
19
- symbolId : string ,
20
- width : number ,
21
- height : number
22
- } & OverrideReferenceBase ) ;
23
-
24
- const extractOverridesHelp = ( subLayer : SJLayer , output : Array < OverrideReference > ) => {
25
- if ( subLayer . _class === 'text' && ! output . some ( r => r . objectId === subLayer . do_objectID ) ) {
26
- output . push ( { type : 'text' , objectId : subLayer . do_objectID , name : subLayer . name } ) ;
13
+ // type OverrideReferenceBase = {
14
+ // objectId: SJObjectId,
15
+ // name: string
16
+ // };
17
+
18
+ // type OverrideReference =
19
+ // | ({ type: 'text' } & OverrideReferenceBase)
20
+ // | ({ type: 'image' } & OverrideReferenceBase)
21
+ // | ({
22
+ // type: 'symbolInstance',
23
+ // symbolId: string,
24
+ // width: number,
25
+ // height: number
26
+ // } & OverrideReferenceBase);
27
+
28
+ const extractOverridesHelp = ( subLayer : any , output : any ) => {
29
+ if (
30
+ subLayer . _class === 'text' &&
31
+ ! output . some ( r => r . objectId === subLayer . do_objectID )
32
+ ) {
33
+ output . push ( {
34
+ type : 'text' ,
35
+ objectId : subLayer . do_objectID ,
36
+ name : subLayer . name ,
37
+ } ) ;
27
38
return ;
28
39
}
29
40
30
- if ( subLayer . _class === 'group' ) {
31
- if ( subLayer . layers && subLayer . layers . length ) {
32
- // here we're doing some look-ahead to see if this group contains a group
33
- // that contains text. this is the structure that will appear if the user
34
- // creates a `<Text />` element with a custom name
35
- const subGroup = subLayer . layers . find ( l => l . _class === 'group' ) ;
36
- const textLayer = subGroup && subGroup . layers
37
- ? subGroup . layers . find ( l => l . _class === 'text' )
38
- : null ;
39
- if ( textLayer ) {
40
- output . push ( { type : 'text' , objectId : textLayer . do_objectID , name : subLayer . name } ) ;
41
- return ;
42
- }
41
+ if ( subLayer . _class === 'group' && subLayer . layers ) {
42
+ // here we're doing some look-ahead to see if this group contains a group
43
+ // that contains text. this is the structure that will appear if the user
44
+ // creates a `<Text />` element with a custom name
45
+ const subGroup = subLayer . layers . find ( l => l . _class === 'group' ) ;
46
+ const textLayer = subGroup && subGroup . layers
47
+ ? subGroup . layers . find ( l => l . _class === 'text' )
48
+ : null ;
49
+ if ( textLayer ) {
50
+ output . push ( {
51
+ type : 'text' ,
52
+ objectId : textLayer . do_objectID ,
53
+ name : subLayer . name ,
54
+ } ) ;
55
+ return ;
56
+ }
43
57
44
- // here we're doing look-ahead to see if this group contains a shapeGroup
45
- // with an image fill. if it does we can do an image override on that
46
- // fill
47
- const shapeGroup = subLayer . layers . find ( l => l . _class === 'shapeGroup' ) ;
48
- if (
49
- shapeGroup &&
50
- shapeGroup . _class === 'shapeGroup' &&
51
- shapeGroup . style &&
52
- shapeGroup . style . fills . some ( f => f . image )
53
- ) {
54
- output . push ( { type : 'image' , objectId : shapeGroup . do_objectID , name : subLayer . name } ) ;
55
- }
58
+ const shapeGroup =
59
+ subLayer . layers && subLayer . layers . find ( l => l . _class === 'shapeGroup' ) ;
60
+ // here we're doing look-ahead to see if this group contains a shapeGroup
61
+ // with an image fill. if it does we can do an image override on that
62
+ // fill
63
+ if (
64
+ shapeGroup &&
65
+ shapeGroup . _class === 'shapeGroup' &&
66
+ shapeGroup . style != null &&
67
+ shapeGroup . style . fills . some ( f => f . image )
68
+ ) {
69
+ output . push ( {
70
+ type : 'image' ,
71
+ objectId : shapeGroup . do_objectID ,
72
+ name : subLayer . name ,
73
+ } ) ;
56
74
}
57
75
}
58
76
@@ -73,11 +91,13 @@ const extractOverridesHelp = (subLayer: SJLayer, output: Array<OverrideReference
73
91
subLayer . _class === 'group' ) &&
74
92
subLayer . layers
75
93
) {
76
- subLayer . layers . forEach ( subSubLayer => extractOverridesHelp ( subSubLayer , output ) ) ;
94
+ subLayer . layers . forEach ( subSubLayer =>
95
+ extractOverridesHelp ( subSubLayer , output ) ,
96
+ ) ;
77
97
}
78
98
} ;
79
99
80
- const extractOverrides = ( subLayers : Array < SJLayer > ) : Array < OverrideReference > => {
100
+ const extractOverrides = ( subLayers : any ) => {
81
101
const output = [ ] ;
82
102
subLayers . forEach ( subLayer => extractOverridesHelp ( subLayer , output ) ) ;
83
103
return output ;
@@ -90,14 +110,14 @@ class SymbolInstanceRenderer extends SketchRenderer {
90
110
textStyle : TextStyle ,
91
111
props : any ,
92
112
// eslint-disable-next-line no-unused-vars
93
- value : ?string
94
- ) : SJSymbolInstanceLayer {
113
+ value : ?string ,
114
+ ) : any {
95
115
const masterTree = getSymbolMasterByName ( props . masterName ) ;
96
116
97
117
const symbolInstance = makeSymbolInstance (
98
118
makeRect ( layout . left , layout . top , layout . width , layout . height ) ,
99
119
masterTree . symbolID ,
100
- props . name
120
+ props . name ,
101
121
) ;
102
122
103
123
if ( ! props . overrides ) {
@@ -106,31 +126,39 @@ class SymbolInstanceRenderer extends SketchRenderer {
106
126
107
127
const overridableLayers = extractOverrides ( masterTree . layers ) ;
108
128
109
- const overrides = overridableLayers . reduce ( function inject ( memo , reference ) {
129
+ const overrides = overridableLayers . reduce ( function inject (
130
+ memo ,
131
+ reference ,
132
+ ) {
110
133
if ( reference . type === 'symbolInstance' ) {
111
134
// eslint-disable-next-line
112
135
if ( props . overrides . hasOwnProperty ( reference . name ) ) {
113
136
const overrideValue = props . overrides [ reference . name ] ;
114
- if ( typeof overrideValue !== 'function' || typeof overrideValue . masterName !== 'string' ) {
137
+ if (
138
+ typeof overrideValue !== 'function' ||
139
+ typeof overrideValue . masterName !== 'string'
140
+ ) {
115
141
throw new Error (
116
- '##FIXME## SYMBOL INSTANCE SUBSTITUTIONS MUST BE PASSED THE CONSTRUCTOR OF THE OTHER SYMBOL'
142
+ '##FIXME## SYMBOL INSTANCE SUBSTITUTIONS MUST BE PASSED THE CONSTRUCTOR OF THE OTHER SYMBOL' ,
117
143
) ;
118
144
}
119
145
120
146
const originalMaster = getSymbolMasterById ( reference . symbolId ) ;
121
- const replacementMaster = getSymbolMasterByName ( overrideValue . masterName ) ;
147
+ const replacementMaster = getSymbolMasterByName (
148
+ overrideValue . masterName ,
149
+ ) ;
122
150
123
151
if (
124
152
originalMaster . frame . width !== replacementMaster . frame . width ||
125
153
originalMaster . frame . height !== replacementMaster . frame . height
126
154
) {
127
155
throw new Error (
128
- '##FIXME## SYMBOL MASTER SUBSTITUTIONS REQUIRE THAT MASTERS HAVE THE SAME DIMENSIONS'
156
+ '##FIXME## SYMBOL MASTER SUBSTITUTIONS REQUIRE THAT MASTERS HAVE THE SAME DIMENSIONS' ,
129
157
) ;
130
158
}
131
159
132
160
const nestedOverrides = extractOverrides (
133
- getSymbolMasterByName ( overrideValue . masterName ) . layers
161
+ getSymbolMasterByName ( overrideValue . masterName ) . layers ,
134
162
) . reduce ( inject , { } ) ;
135
163
136
164
return {
@@ -143,7 +171,7 @@ class SymbolInstanceRenderer extends SketchRenderer {
143
171
}
144
172
145
173
const nestedOverrides = extractOverrides (
146
- getSymbolMasterById ( reference . symbolId ) . layers
174
+ getSymbolMasterById ( reference . symbolId ) . layers ,
147
175
) . reduce ( inject , { } ) ;
148
176
149
177
return {
@@ -168,11 +196,15 @@ class SymbolInstanceRenderer extends SketchRenderer {
168
196
169
197
if ( reference . type === 'image' ) {
170
198
if ( typeof overrideValue !== 'string' ) {
171
- throw new Error ( '##FIXME"" IMAGE OVERRIDE VALUES MUST BE VALID IMAGE HREFS' ) ;
199
+ throw new Error (
200
+ '##FIXME"" IMAGE OVERRIDE VALUES MUST BE VALID IMAGE HREFS' ,
201
+ ) ;
172
202
}
173
203
return {
174
204
...memo ,
175
- [ reference . objectId ] : makeJSONDataReference ( makeImageDataFromUrl ( overrideValue ) ) ,
205
+ [ reference . objectId ] : makeJSONDataReference (
206
+ makeImageDataFromUrl ( overrideValue ) ,
207
+ ) ,
176
208
} ;
177
209
}
178
210
0 commit comments