diff --git a/example/assets/preview_config.json b/example/assets/preview_config.json index 5607fa4..6894852 100644 --- a/example/assets/preview_config.json +++ b/example/assets/preview_config.json @@ -26,6 +26,34 @@ } }, "children": { + "utils": { + "id": "utils", + "route": "widgets/utils", + "builtComponents": {}, + "children": { + "bottom": { + "id": "bottom", + "route": "widgets/utils/bottom", + "builtComponents": { + "./example/lib/catalog/widgets/utils/bottom/fab_widget.dart": { + "path": "./example/lib/catalog/widgets/utils/bottom/fab_widget.dart", + "route": "widgets/utils/bottom", + "package": "package:example/catalog/widgets/utils/bottom/fab_widget.dart", + "clazzName": "FabWidgetPreviewPreviewPageDummy", + "preview": { + "id": "fab_widget", + "path": "widgets/utils/bottom", + "description": "Basic fab widget", + "parameters": [ + "incrementCounter" + ] + } + } + }, + "children": {} + } + } + }, "screen": { "id": "screen", "route": "widgets/screen", @@ -45,20 +73,6 @@ ] } }, - "./example/lib/catalog/widgets/screen/fab_widget.dart": { - "path": "./example/lib/catalog/widgets/screen/fab_widget.dart", - "route": "widgets/screen", - "package": "package:example/catalog/widgets/screen/fab_widget.dart", - "clazzName": "FabWidgetPreviewPreviewPageDummy", - "preview": { - "id": "fab_widget", - "path": "widgets/screen", - "description": "Basic fab widget", - "parameters": [ - "incrementCounter" - ] - } - }, "./example/lib/catalog/widgets/screen/counter_widget.dart": { "path": "./example/lib/catalog/widgets/screen/counter_widget.dart", "route": "widgets/screen", diff --git a/example/lib/catalog/catalog_component.dart b/example/lib/catalog/catalog_component.dart index 7911280..bbed7f9 100644 --- a/example/lib/catalog/catalog_component.dart +++ b/example/lib/catalog/catalog_component.dart @@ -4,7 +4,15 @@ import 'package:flutter/material.dart'; import 'package:catalog/catalog.dart'; -import 'package:example/catalog/widgets/screen/body_widget.dart';import 'package:example/catalog/widgets/screen/fab_widget.dart';import 'package:example/catalog/widgets/screen/counter_widget.dart'; +import 'package:example/catalog/widgets/utils/bottom/fab_widget.dart'; + + + + + + + +import 'package:example/catalog/widgets/screen/body_widget.dart';import 'package:example/catalog/widgets/screen/counter_widget.dart'; @@ -45,7 +53,16 @@ class CatalogComponent extends StatefulWidget { , GoRoute( - path: 'screen', + path: 'utils', + redirect: (context, state) { + if (state.fullPath != state.matchedLocation) return null; + return CatalogComponent.routeName; + }, + routes: [ + + + GoRoute( + path: 'bottom', redirect: (context, state) { if (state.fullPath != state.matchedLocation) return null; return CatalogComponent.routeName; @@ -53,19 +70,34 @@ class CatalogComponent extends StatefulWidget { routes: [ GoRoute( - path: BodyWidgetPreviewPreviewPageDummy.routeName, + path: FabWidgetPreviewPreviewPageDummy.routeName, pageBuilder: (context, state) => NoTransitionPage( key: state.pageKey, - child: const BodyWidgetPreviewPreviewPageDummy(), + child: const FabWidgetPreviewPreviewPageDummy(), ), ) - , + + , + + ], + ) + + ], + ) + , GoRoute( + path: 'screen', + redirect: (context, state) { + if (state.fullPath != state.matchedLocation) return null; + return CatalogComponent.routeName; + }, + routes: [ + GoRoute( - path: FabWidgetPreviewPreviewPageDummy.routeName, + path: BodyWidgetPreviewPreviewPageDummy.routeName, pageBuilder: (context, state) => NoTransitionPage( key: state.pageKey, - child: const FabWidgetPreviewPreviewPageDummy(), + child: const BodyWidgetPreviewPreviewPageDummy(), ), ) diff --git a/example/lib/catalog/widgets/screen/fab_widget.dart b/example/lib/catalog/widgets/utils/bottom/fab_widget.dart similarity index 86% rename from example/lib/catalog/widgets/screen/fab_widget.dart rename to example/lib/catalog/widgets/utils/bottom/fab_widget.dart index 23f91ac..0fc351c 100644 --- a/example/lib/catalog/widgets/screen/fab_widget.dart +++ b/example/lib/catalog/widgets/utils/bottom/fab_widget.dart @@ -1,7 +1,7 @@ /// AUTOGENERATED FILE. DO NOT EDIT import 'package:flutter/material.dart'; -import 'package:example/widgets/screen/catalog/preview/fab_widget.preview.dart'; +import 'package:example/widgets/utils/bottom/catalog/preview/fab_widget.preview.dart'; class FabWidgetPreviewPreviewPageDummy extends StatefulWidget { diff --git a/example/lib/widgets/main_screen.dart b/example/lib/widgets/main_screen.dart index bd4f88e..9809d36 100644 --- a/example/lib/widgets/main_screen.dart +++ b/example/lib/widgets/main_screen.dart @@ -2,7 +2,7 @@ import 'package:catalog/catalog.dart'; import 'package:flutter/material.dart'; import 'screen/body_widget.dart'; -import 'screen/fab_widget.dart'; +import 'utils/bottom/fab_widget.dart'; @Preview( parameters: [ diff --git a/example/lib/widgets/screen/catalog/dummy/fab_widget.dummy.dart b/example/lib/widgets/utils/bottom/catalog/dummy/fab_widget.dummy.dart similarity index 100% rename from example/lib/widgets/screen/catalog/dummy/fab_widget.dummy.dart rename to example/lib/widgets/utils/bottom/catalog/dummy/fab_widget.dummy.dart diff --git a/example/lib/widgets/screen/catalog/preview/fab_widget.preview.dart b/example/lib/widgets/utils/bottom/catalog/preview/fab_widget.preview.dart similarity index 98% rename from example/lib/widgets/screen/catalog/preview/fab_widget.preview.dart rename to example/lib/widgets/utils/bottom/catalog/preview/fab_widget.preview.dart index 4b97fd2..d18edaa 100644 --- a/example/lib/widgets/screen/catalog/preview/fab_widget.preview.dart +++ b/example/lib/widgets/utils/bottom/catalog/preview/fab_widget.preview.dart @@ -2,7 +2,7 @@ import 'package:catalog/catalog.dart'; import 'package:flutter/material.dart'; -import 'package:example/widgets/screen/fab_widget.dart'; +import 'package:example/widgets/utils/bottom/fab_widget.dart'; import '../dummy/fab_widget.dummy.dart'; @Preview( diff --git a/example/lib/widgets/screen/fab_widget.dart b/example/lib/widgets/utils/bottom/fab_widget.dart similarity index 100% rename from example/lib/widgets/screen/fab_widget.dart rename to example/lib/widgets/utils/bottom/fab_widget.dart diff --git a/lib/src/annotations/internal_preview.dart b/lib/src/annotations/internal_preview.dart new file mode 100644 index 0000000..260dacc --- /dev/null +++ b/lib/src/annotations/internal_preview.dart @@ -0,0 +1,66 @@ +import 'dart:convert'; + +import 'package:catalog/src/base/serial.dart'; + +class InternalPreview implements Serial { + final String id; + final String path; + final String description; + final List parameters; + + const InternalPreview({ + this.id = '', + this.path = '', + this.description = '', + this.parameters = const [], + }); + + @override + InternalPreview fromJson(Map json) => InternalPreview( + id: json['id'] ?? '', + path: json['path'] ?? '', + description: json['description'] ?? '', + parameters: Serial.listObjectFromBasicType( + json['parameters'] ?? [], + ), + ); + + @override + String getId() => id; + + @override + InternalPreview instance() => const InternalPreview(id: '', path: ''); + + @override + Map toJson() => { + 'id': id, + 'path': path, + 'description': description, + 'parameters': parameters, + }; + + @override + InternalPreview fromString(String value) { + Map map = jsonDecode(value); + return fromJson(map); + } + + @override + String stringValue() { + var map = toJson(); + return jsonEncode(map); + } + + InternalPreview copyWith({ + String? id, + String? path, + String? description, + List? parameters, + }) => + InternalPreview( + id: id ?? this.id, + path: path ?? this.path, + description: description ?? this.description, + parameters: parameters ?? this.parameters, + ); +} diff --git a/lib/src/base/serial.dart b/lib/src/base/serial.dart index 8e0739f..25b6f35 100644 --- a/lib/src/base/serial.dart +++ b/lib/src/base/serial.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:catalog/src/annotations/internal_preview.dart'; import 'package:catalog/src/annotations/preview.dart'; import 'package:catalog/src/builders/catalog/built_component.dart'; import 'package:catalog/src/builders/catalog/component_node.dart'; @@ -79,6 +80,7 @@ abstract class Serial { ComponentNode(), BuiltComponent(), const Preview(id: '', path: ''), + const InternalPreview(id: '', path: ''), ]; static Map internalLinkerToMap(map) { diff --git a/lib/src/bin/catalog_builder/catalog_builder.dart b/lib/src/bin/catalog_builder/catalog_builder.dart index 7854507..4cb73d7 100644 --- a/lib/src/bin/catalog_builder/catalog_builder.dart +++ b/lib/src/bin/catalog_builder/catalog_builder.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:catalog/src/annotations/preview.dart'; +import 'package:catalog/src/annotations/internal_preview.dart'; import 'package:catalog/src/builders/catalog/built_component.dart'; import 'package:catalog/src/builders/catalog/component_node.dart'; import 'package:catalog/src/extensions/string_ext.dart'; @@ -22,7 +22,7 @@ Future createPage( String outputPath, String outputFile, String prefix, - Preview preview, + InternalPreview preview, String import, String name, ) async { diff --git a/lib/src/bin/preview_builder/preview_builder.dart b/lib/src/bin/preview_builder/preview_builder.dart index fb2dca8..86fc331 100644 --- a/lib/src/bin/preview_builder/preview_builder.dart +++ b/lib/src/bin/preview_builder/preview_builder.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:catalog/src/annotations/preview.dart'; +import 'package:catalog/src/annotations/internal_preview.dart'; Future findClassName(String path) async { try { @@ -20,7 +20,7 @@ Future generatePreview( String previewAnnotation, String className, String prefix, - Preview preview, + InternalPreview preview, ) async { var clazz = className.replaceAll('()', ''); @@ -168,7 +168,7 @@ String dummyWidgetBuilder(String clazz, String widgetCompose) { '''; } -String dummyWidgetContent(String className, Preview preview) { +String dummyWidgetContent(String className, InternalPreview preview) { var clazz = className.replaceAll('()', ''); var widgetCompose = '$clazz('; diff --git a/lib/src/bin/utils/configuration.dart b/lib/src/bin/utils/configuration.dart index 73f8c69..cc3be26 100644 --- a/lib/src/bin/utils/configuration.dart +++ b/lib/src/bin/utils/configuration.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'dart:io'; -import 'package:catalog/src/annotations/preview.dart'; +import 'package:catalog/src/annotations/internal_preview.dart'; import 'package:yaml/yaml.dart'; import 'exceptions.dart'; @@ -74,7 +74,7 @@ String loadId(String basePath) { return yamlMap[nammeId]; } -Future previewOnFile( +Future previewOnFile( String basePath, dynamic config, String originalFilePath, @@ -172,8 +172,12 @@ void main(List arguments) async { var path = file.absolute.path; var result = await Process.run('dart', ['run', path]); - var preview = - const Preview(id: '', path: '').fromJson(jsonDecode(result.stdout)); + var preview = const InternalPreview( + id: '', + path: '', + ).fromJson( + jsonDecode(result.stdout), + ); if (preview.id.isEmpty) { preview = preview.copyWith( diff --git a/lib/src/builders/catalog/built_component.dart b/lib/src/builders/catalog/built_component.dart index 8cf9251..3024bb1 100644 --- a/lib/src/builders/catalog/built_component.dart +++ b/lib/src/builders/catalog/built_component.dart @@ -1,4 +1,4 @@ -import 'package:catalog/src/annotations/preview.dart'; +import 'package:catalog/src/annotations/internal_preview.dart'; import 'package:catalog/src/base/serial.dart'; class BuiltComponent extends Serial { @@ -6,7 +6,7 @@ class BuiltComponent extends Serial { String route = ''; String package = ''; String clazzName = ''; - Preview? preview; + InternalPreview? preview; String get name { if (!path.contains('/')) return path; @@ -35,7 +35,8 @@ class BuiltComponent extends Serial { package = json['package'] ?? ''; clazzName = json['clazzName'] ?? ''; if (json['preview'] != null) { - preview = const Preview(id: '', path: '').fromJson(json['preview'] ?? {}); + preview = const InternalPreview(id: '', path: '') + .fromJson(json['preview'] ?? {}); } return this; }