Skip to content
This repository has been archived by the owner on Jan 25, 2024. It is now read-only.

Commit

Permalink
Merge pull request #328 from Parabeac/release/1.4.2
Browse files Browse the repository at this point in the history
Release/1.4.2
  • Loading branch information
mergify[bot] committed Mar 24, 2021
2 parents ae7ebed + cb60df6 commit bec9b2f
Show file tree
Hide file tree
Showing 13 changed files with 205 additions and 96 deletions.
9 changes: 6 additions & 3 deletions lib/generation/flutter_project_builder/import_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,13 @@ class ImportHelper {
id = node.UUID;
}

var nodePath = PBGenCache().getPath(id);
var nodePaths = PBGenCache().getPaths(id);
// Make sure nodePath exists and is not the same as path (importing yourself)
if (nodePath != null && nodePath.isNotEmpty && path != nodePath) {
imports.add(PBGenCache().getRelativePath(path, id));
if (nodePaths != null &&
nodePaths.isNotEmpty &&
!nodePaths.any((element) => element == path)) {
var paths = PBGenCache().getRelativePath(path, id);
paths.forEach(imports.add);
}

// Recurse through child/children and add to imports
Expand Down
12 changes: 1 addition & 11 deletions lib/generation/generators/middleware/middleware.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ abstract class Middleware {
Future.value(node);

void addImportToCache(String id, String path) {
PBGenCache().addToCache(id, path);
PBGenCache().setPathToCache(id, path);
}

String getVariableName(String name) {
Expand All @@ -35,14 +35,4 @@ abstract class Middleware {
return name + '_' + (++variableNames[name]).toString();
}
}

String wrapOnLayout(String className) {
return '''
LayoutBuilder(builder: (context, constraints) {
return $className(
constraints,
);
})
''';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ import 'package:parabeac_core/generation/generators/middleware/middleware.dart';
import 'package:parabeac_core/generation/generators/middleware/state_management/utils/middleware_utils.dart';
import 'package:parabeac_core/generation/generators/pb_generation_manager.dart';
import 'package:parabeac_core/generation/generators/pb_variable.dart';
import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart';
import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/provider_file_structure_strategy.dart';
import 'package:parabeac_core/generation/generators/value_objects/template_strategy/stateless_template_strategy.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart';
import 'package:parabeac_core/interpret_and_optimize/helpers/pb_gen_cache.dart';
import 'package:parabeac_core/interpret_and_optimize/helpers/pb_symbol_storage.dart';
import 'package:recase/recase.dart';
import 'package:parabeac_core/generation/generators/value_objects/generator_adapter.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart';

import '../../pb_flutter_generator.dart';

class ProviderMiddleware extends Middleware {
final PACKAGE_NAME = 'provider';
final PACKAGE_VERSION = '^4.3.2+3';
Expand All @@ -36,36 +40,83 @@ class ProviderMiddleware extends Middleware {
watcher = PBVariable(watcherName, 'final ', true,
'${getName(node.functionCallName).pascalCase}().${widgetName}');
managerData.addGlobalVariable(watcher);
} else {
watcher = PBVariable(watcherName, 'final ', true,
'context.watch<${getName(node.functionCallName).pascalCase}>().${widgetName}');
managerData.addMethodVariable(watcher);
}

addImportToCache(node.SYMBOL_ID, getImportPath(node, fileStrategy));
PBGenCache().appendToCache(node.SYMBOL_ID,
getImportPath(node, fileStrategy, generateModelPath: false));

if (node.generator is! StringGeneratorAdapter) {
node.generator = StringGeneratorAdapter(watcherName);
var modelName = getName(node.functionCallName).pascalCase;
var defaultWidget = node.functionCallName.pascalCase;
var providerWidget = '''
ChangeNotifierProvider(
create: (context) =>
${modelName}(),
child: LayoutBuilder(
builder: (context, constraints) {
var widget = ${defaultWidget}(constraints);
context
.read<${modelName}>()
.setCurrentWidget(
widget); // Setting active state
return GestureDetector(
onTap: () => context.read<
${modelName}>(), // TODO: add your method to change the state here
child: context
.watch<${modelName}>()
.currentWidget,
);
},
),
)
''';
node.generator = StringGeneratorAdapter(providerWidget);
}
return node;
}
watcherName = getNameOfNode(node);

var code = MiddlewareUtils.generateChangeNotifierClass(
watcherName,
generationManager,
node,
var parentDirectory = getName(node.name).snakeCase;

// Generate model's imports
var modelGenerator = PBFlutterGenerator(
data: PBGenerationViewData()
..addImport('package:flutter/material.dart'));
// Write model class for current node
var code = MiddlewareUtils.generateModelChangeNotifier(
watcherName, modelGenerator, node);
fileStrategy.writeProviderModelFile(code, parentDirectory);

// Generate default node's view page
await fileStrategy.generatePage(
await generationManager.generate(node),
'${parentDirectory}/${node.name.snakeCase}',
args: 'VIEW',
);
fileStrategy.writeProviderModelFile(code, getName(node.name).snakeCase);

// Generate node's states' view pages
node.auxiliaryData?.stateGraph?.states?.forEach((state) async {
await fileStrategy.generatePage(
await generationManager.generate(state.variation.node),
'${parentDirectory}/${state.variation.node.name.snakeCase}',
args: 'VIEW',
);
});

return node;
}

String getImportPath(PBSharedInstanceIntermediateNode node, fileStrategy) {
String getImportPath(PBSharedInstanceIntermediateNode node,
ProviderFileStructureStrategy fileStrategy,
{bool generateModelPath = true}) {
var symbolMaster =
PBSymbolStorage().getSharedMasterNodeBySymbolID(node.SYMBOL_ID);
return fileStrategy.GENERATED_PROJECT_PATH +
fileStrategy.RELATIVE_MODEL_PATH +
'${getName(symbolMaster.name).snakeCase}.dart';
var import = generateModelPath
? '${fileStrategy.RELATIVE_MODEL_PATH}${getName(symbolMaster.name).snakeCase}.dart'
: '${fileStrategy.RELATIVE_VIEW_PATH}${getName(symbolMaster.name).snakeCase}/${node.functionCallName.snakeCase}.dart';
return fileStrategy.GENERATED_PROJECT_PATH + import;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:parabeac_core/generation/generators/middleware/middleware.dart';
import 'package:parabeac_core/generation/generators/middleware/state_management/utils/middleware_utils.dart';
import 'package:parabeac_core/generation/generators/pb_generation_manager.dart';
import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy.dart/flutter_file_structure_strategy.dart';
import 'package:parabeac_core/generation/generators/value_objects/generator_adapter.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart';
import 'package:parabeac_core/interpret_and_optimize/helpers/pb_symbol_storage.dart';
import 'package:recase/recase.dart';
Expand Down Expand Up @@ -59,7 +59,7 @@ class StatefulMiddleware extends Middleware {
'var ',
true,
node.functionCallName == symbolMaster.name
? wrapOnLayout('${symbolMaster.name.pascalCase}')
? MiddlewareUtils.wrapOnLayout('${symbolMaster.name.pascalCase}')
: null,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,29 @@ class MiddlewareUtils {
''';
}

static String generateModelChangeNotifier(
String defaultStateName,
PBGenerationManager manager,
PBIntermediateNode node,
) {
// Pass down manager data to states
node?.auxiliaryData?.stateGraph?.states?.forEach((state) {
state.variation.node.currentContext.treeRoot.data = node.managerData;
});
return '''
${manager.generateImports()}
class ${defaultStateName} extends ChangeNotifier {
Widget currentWidget;
${defaultStateName}(){}
void setCurrentWidget(Widget currentWidget) {
this.currentWidget = currentWidget;
}
}
''';
}

static String generateVariable(PBIntermediateNode node,
{String type = 'var'}) {
return '${type} ${node.name.camelCase} = ' + generateVariableBody(node);
Expand All @@ -76,4 +99,14 @@ class MiddlewareUtils {
GeneratorContext(sizingContext: SizingValueContext.PointValue)) ??
'') +
';';

static String wrapOnLayout(String className) {
return '''
LayoutBuilder(builder: (context, constraints) {
return $className(
constraints,
);
})
''';
}
}
2 changes: 1 addition & 1 deletion lib/generation/generators/pb_generation_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ abstract class PBGenerationManager {

String generate(PBIntermediateNode rootNode);

String getPath(String uuid) => PBGenCache().getPath(uuid);
Set<String> getPaths(String uuid) => PBGenCache().getPaths(uuid);

String generateImports();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ abstract class FileStructureStrategy {
var path = node is PBSharedMasterNode
? '${_viewDirectoryPath}${tree.name.snakeCase}/${name}.dart' // Removed .g
: '${_screenDirectoryPath}${tree.name.snakeCase}/${name}.dart';
PBGenCache().addToCache(uuid, path);
PBGenCache().setPathToCache(uuid, path);
} else {
logger.warning(
'The following intermediateNode was missing a name: ${tree.toString()}');
Expand All @@ -94,4 +94,7 @@ abstract class FileStructureStrategy {
}
return Future.value();
}

String getViewPath(String fileName) =>
'${_viewDirectoryPath}${fileName}.dart';
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,12 +140,13 @@ abstract class GenerationConfiguration {

void _commitImports(
PBIntermediateNode node, String directoryName, String fileName) {
var nodePath = PBGenCache()
.getPath(node is PBSharedMasterNode ? node.SYMBOL_ID : node.UUID);
var imports = ImportHelper.findImports(node, nodePath);
imports.forEach((import) {
node.managerData.addImport(import);
});
var nodePaths = PBGenCache()
.getPaths(node is PBSharedMasterNode ? node.SYMBOL_ID : node.UUID);
var imports = <String>{};
// Fetch imports for each path
nodePaths.forEach(
(path) => imports.addAll(ImportHelper.findImports(node, path)));
imports.forEach(node.managerData.addImport);
}

Future<void> _commitDependencies(String projectName) async {
Expand Down
13 changes: 11 additions & 2 deletions lib/input/figma/entities/layers/line.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ import 'package:parabeac_core/design_logic/design_node.dart';
import 'package:parabeac_core/input/figma/entities/abstract_figma_node_factory.dart';
import 'package:parabeac_core/input/figma/entities/layers/vector.dart';
import 'package:parabeac_core/input/sketch/entities/objects/frame.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart';
import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart';

import 'figma_node.dart';

Expand Down Expand Up @@ -65,8 +67,15 @@ class FigmaLine extends FigmaVector implements AbstractFigmaNodeFactory {

@override
Future<PBIntermediateNode> interpretNode(PBContext currentContext) {
// TODO: implement interpretNode
throw UnimplementedError();
return Future.value(InheritedContainer(
this,
Point(boundaryRectangle.x, boundaryRectangle.y),
Point(
boundaryRectangle.x + boundaryRectangle.width,
boundaryRectangle.y + boundaryRectangle.height,
),
name,
));
}

@override
Expand Down
13 changes: 10 additions & 3 deletions lib/input/figma/entities/layers/star.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'package:parabeac_core/design_logic/design_node.dart';
import 'package:parabeac_core/input/figma/entities/abstract_figma_node_factory.dart';
import 'package:parabeac_core/input/figma/entities/layers/vector.dart';
import 'package:parabeac_core/input/figma/helper/figma_asset_processor.dart';
import 'package:parabeac_core/input/sketch/entities/objects/frame.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart';
import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart';
import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart';
import 'package:json_annotation/json_annotation.dart';
Expand Down Expand Up @@ -64,9 +66,14 @@ class FigmaStar extends FigmaVector implements AbstractFigmaNodeFactory {
Map<String, dynamic> toJson() => _$FigmaStarToJson(this);

@override
Future<PBIntermediateNode> interpretNode(PBContext currentContext) {
// TODO: implement interpretNode
throw UnimplementedError();
Future<PBIntermediateNode> interpretNode(PBContext currentContext) async {
imageReference = FigmaAssetProcessor().processImage(UUID);
return Future.value(InheritedBitmap(
this,
name,
currentContext: currentContext,
referenceImage: imageReference,
));
}

@override
Expand Down
Loading

0 comments on commit bec9b2f

Please sign in to comment.