Skip to content

Commit

Permalink
Bugfix/devtools null signal name (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
nank1ro committed Dec 19, 2023
1 parent ce91bfc commit f46b91d
Show file tree
Hide file tree
Showing 23 changed files with 106 additions and 19 deletions.
4 changes: 3 additions & 1 deletion examples/github_search/lib/models/github_user.dart
Expand Up @@ -2,7 +2,7 @@ import 'package:json_annotation/json_annotation.dart';

part 'github_user.g.dart';

@JsonSerializable(createToJson: false)
@JsonSerializable()
class GithubUser {
const GithubUser({
required this.login,
Expand All @@ -12,6 +12,8 @@ class GithubUser {
factory GithubUser.fromJson(Map<String, dynamic> json) =>
_$GithubUserFromJson(json);

Map<String, dynamic> toJson() => _$GithubUserToJson(this);

final String login;
@JsonKey(name: 'avatar_url')
final String avatarUrl;
Expand Down
6 changes: 6 additions & 0 deletions examples/github_search/lib/models/github_user.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion examples/github_search/lib/models/search_result.dart
Expand Up @@ -4,7 +4,7 @@ import 'package:json_annotation/json_annotation.dart';

part 'search_result.g.dart';

@JsonSerializable(createToJson: false)
@JsonSerializable()
class SearchResult extends Equatable {
const SearchResult({required this.items});

Expand All @@ -13,6 +13,8 @@ class SearchResult extends Equatable {
factory SearchResult.fromJson(Map<String, dynamic> json) =>
_$SearchResultFromJson(json);

Map<String, dynamic> toJson() => _$SearchResultToJson(this);

final List<SearchResultItem> items;

@override
Expand Down
5 changes: 5 additions & 0 deletions examples/github_search/lib/models/search_result.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion examples/github_search/lib/models/search_result_error.dart
Expand Up @@ -3,13 +3,15 @@ import 'package:json_annotation/json_annotation.dart';

part 'search_result_error.g.dart';

@JsonSerializable(createToJson: false)
@JsonSerializable()
class SearchResultError extends Equatable implements Exception {
const SearchResultError({required this.message});

factory SearchResultError.fromJson(Map<String, dynamic> json) =>
_$SearchResultErrorFromJson(json);

Map<String, dynamic> toJson() => _$SearchResultErrorToJson(this);

final String message;

@override
Expand Down
5 changes: 5 additions & 0 deletions examples/github_search/lib/models/search_result_error.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion examples/github_search/lib/models/search_result_item.dart
Expand Up @@ -4,7 +4,7 @@ import 'package:json_annotation/json_annotation.dart';

part 'search_result_item.g.dart';

@JsonSerializable(createToJson: false)
@JsonSerializable()
class SearchResultItem extends Equatable {
const SearchResultItem({
required this.fullName,
Expand All @@ -15,6 +15,8 @@ class SearchResultItem extends Equatable {
factory SearchResultItem.fromJson(Map<String, dynamic> json) =>
_$SearchResultItemFromJson(json);

Map<String, dynamic> toJson() => _$SearchResultItemToJson(this);

@JsonKey(name: 'full_name')
final String fullName;
@JsonKey(name: 'html_url')
Expand Down
7 changes: 7 additions & 0 deletions examples/github_search/lib/models/search_result_item.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions packages/solidart/CHANGELOG.md
@@ -1,3 +1,7 @@
## 1.5.2

- **BUGFIX**: Fix DevTools extension with null signal name.

## 1.5.1

- **CHORE**: Upload DevTools extension to pub.dev
Expand Down
2 changes: 1 addition & 1 deletion packages/solidart/extension/devtools/config.yaml
@@ -1,4 +1,4 @@
name: solidart
issueTracker: https://github.com/nank1ro/solidart/issues
version: 0.0.1
version: 0.2.0
materialIconCodePoint: "0xf0249"
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/collections/list.dart
Expand Up @@ -20,7 +20,8 @@ class ListSignal<E> extends Signal<List<E>> with ListMixin<E> {
SignalOptions<List<E>>? options,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('ListSignal');
final effectiveOptions = options ?? SignalOptions<List<E>>(name: name);
final effectiveOptions =
(options ?? SignalOptions<List<E>>(name: name)).copyWith(name: name);
return ListSignal._internal(
initialValue: initialValue.toList(),
options: effectiveOptions,
Expand Down
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/collections/map.dart
Expand Up @@ -20,7 +20,8 @@ class MapSignal<K, V> extends Signal<Map<K, V>> with MapMixin<K, V> {
SignalOptions<Map<K, V>>? options,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('MapSignal');
final effectiveOptions = options ?? SignalOptions<Map<K, V>>(name: name);
final effectiveOptions =
(options ?? SignalOptions<Map<K, V>>(name: name)).copyWith(name: name);
return MapSignal._internal(
initialValue: Map<K, V>.of(initialValue),
options: effectiveOptions,
Expand Down
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/collections/set.dart
Expand Up @@ -20,7 +20,8 @@ class SetSignal<E> extends Signal<Set<E>> with SetMixin<E> {
SignalOptions<Set<E>>? options,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('SetSignal');
final effectiveOptions = options ?? SignalOptions<Set<E>>(name: name);
final effectiveOptions =
(options ?? SignalOptions<Set<E>>(name: name)).copyWith(name: name);
return SetSignal._internal(
initialValue: initialValue.toSet(),
options: effectiveOptions,
Expand Down
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/computed.dart
Expand Up @@ -69,7 +69,8 @@ class Computed<T> extends ReadSignal<T> implements Derivation {
SignalOptions<T>? options,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('Computed');
final effectiveOptions = options ?? SignalOptions<T>(name: name);
final effectiveOptions =
(options ?? SignalOptions<T>(name: name)).copyWith(name: name);
return Computed._internal(
selector: selector,
name: name,
Expand Down
1 change: 1 addition & 0 deletions packages/solidart/lib/src/core/devtools.dart
Expand Up @@ -79,6 +79,7 @@ void _notifyDevToolsAboutSignal(
'disposed': signal._disposed,
'autoDispose': signal.options.autoDispose,
'listenerCount': signal.listenerCount,
'lastUpdate': DateTime.now().toIso8601String(),
});
}
// coverage:ignore-end
20 changes: 18 additions & 2 deletions packages/solidart/lib/src/core/effect.dart
Expand Up @@ -28,6 +28,21 @@ class EffectOptions {
///
/// This happens automatically when all the tracked dependencies are disposed.
final bool autoDispose;

// coverage:ignore-start

/// Creates a copy of this [EffectOptions] with the given [name].
EffectOptions copyWith({
String? name,
}) {
return EffectOptions(
name: name ?? this.name,
delay: delay,
autoDispose: autoDispose,
);
}

// coverage:ignore-end
}

// coverage:ignore-start
Expand Down Expand Up @@ -119,7 +134,8 @@ class Effect implements ReactionInterface {
EffectOptions? options,
}) {
late Effect effect;
final effectiveOptions = options ?? EffectOptions();
final name = options?.name ?? ReactiveContext.main.nameFor('Effect');
final effectiveOptions = (options ?? EffectOptions()).copyWith(name: name);
if (effectiveOptions.delay == null) {
effect = Effect._internal(
callback: () => effect._track(() => callback(effect.dispose)),
Expand Down Expand Up @@ -168,7 +184,7 @@ class Effect implements ReactionInterface {
required this.options,
ErrorCallback? onError,
}) : _onError = onError,
name = options.name ?? ReactiveContext.main.nameFor('Effect'),
name = options.name!,
_callback = callback;

/// The name of the effect, useful for logging purposes.
Expand Down
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/read_signal.dart
Expand Up @@ -23,7 +23,8 @@ class ReadSignal<T> extends Atom implements SignalBase<T> {
SignalOptions<T>? options,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('ReadSignal');
final effectiveOptions = options ?? SignalOptions<T>(name: name);
final effectiveOptions =
(options ?? SignalOptions<T>(name: name)).copyWith(name: name);
return ReadSignal._internal(
initialValue: initialValue,
options: effectiveOptions,
Expand Down
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/resource.dart
Expand Up @@ -105,7 +105,8 @@ class Resource<T> extends Signal<ResourceState<T>> {
SignalBase<dynamic>? source,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('Resource');
final resourceOptions = options ?? ResourceOptions(name: name);
final resourceOptions =
(options ?? ResourceOptions(name: name)).copyWith(name: name);
final signalOptions = resourceOptions.toSignalOptions<T>();
return Resource._internal(
fetcher: fetcher,
Expand Down
3 changes: 2 additions & 1 deletion packages/solidart/lib/src/core/signal.dart
Expand Up @@ -116,7 +116,8 @@ class Signal<T> extends ReadSignal<T> {
SignalOptions<T>? options,
}) {
final name = options?.name ?? ReactiveContext.main.nameFor('Signal');
final effectiveOptions = options ?? SignalOptions<T>(name: name);
final effectiveOptions =
(options ?? SignalOptions<T>(name: name)).copyWith(name: name);
return Signal._internal(
initialValue: initialValue,
options: effectiveOptions,
Expand Down
27 changes: 27 additions & 0 deletions packages/solidart/lib/src/core/signal_options.dart
Expand Up @@ -53,6 +53,22 @@ class SignalOptions<T> {
@override
String toString() =>
'''SignalOptions<$T>(name: $name, equals: $equals, comparator: ${comparator != null ? "PRESENT" : "MISSING"}, autoDispose: $autoDispose)''';

// coverage:ignore-start

/// Creates a copy of this [SignalOptions] with the given [name].
SignalOptions<T> copyWith({
String? name,
}) {
return SignalOptions<T>(
name: name ?? this.name,
equals: equals,
comparator: comparator,
autoDispose: autoDispose,
);
}

// coverage:ignore-end
}

/// {@template resource-options}
Expand Down Expand Up @@ -96,5 +112,16 @@ class ResourceOptions {
String toString() =>
'ResourceOptions(lazy: $lazy, name: $name, autoDispose: $autoDispose)';

/// Creates a copy of this [ResourceOptions] with the given [name].
ResourceOptions copyWith({
String? name,
}) {
return ResourceOptions(
lazy: lazy,
name: name ?? this.name,
autoDispose: autoDispose,
);
}

/// coverage:ignore-end
}
2 changes: 1 addition & 1 deletion packages/solidart/pubspec.yaml
@@ -1,6 +1,6 @@
name: solidart
description: A simple State Management solution for Dart applications inspired by SolidJS
version: 1.5.1
version: 1.5.2
repository: https://github.com/nank1ro/solidart
documentation: https://docs.page/nank1ro/solidart~dev
topics:
Expand Down
7 changes: 4 additions & 3 deletions packages/solidart_devtools_extension/lib/main.dart
Expand Up @@ -133,16 +133,16 @@ class _SignalsState extends State<Signals> {
case 'solidart.signal.updated':
case 'solidart.signal.disposed':
signals[data['name']] = SignalData(
value: jsonDecode(data['value']),
value: jsonDecode(data['value'] ?? 'null'),
hasPreviousValue: data['hasPreviousValue'],
previousValue: jsonDecode(data['previousValue']),
previousValue: jsonDecode(data['previousValue'] ?? 'null'),
type: SignalType.byName(data['type']),
disposed: data['disposed'],
autoDispose: data['autoDispose'],
listenerCount: data['listenerCount'],
valueType: data['valueType'],
previousValueType: data['previousValueType'],
lastUpdate: DateTime.now(),
lastUpdate: DateTime.parse(data['lastUpdate']!),
);
}
});
Expand Down Expand Up @@ -332,6 +332,7 @@ class _SignalsState extends State<Signals> {
?.value;
if (signal == null) return const SizedBox();
return Card(
key: ValueKey(selectedName),
child: LayoutBuilder(builder: (context, constraints) {
return SingleChildScrollView(
padding:
Expand Down
2 changes: 1 addition & 1 deletion packages/solidart_devtools_extension/pubspec.yaml
@@ -1,7 +1,7 @@
name: solidart_devtools_extension
description: "solidart DevTools extension"
publish_to: "none"
version: 1.0.0+1
version: 0.2.0

environment:
sdk: ^3.0.0
Expand Down

0 comments on commit f46b91d

Please sign in to comment.