Add searching to CreatePostStore
This commit is contained in:
parent
8c54e38e99
commit
c320585810
|
@ -347,5 +347,9 @@
|
|||
"instance_added": "Instance successfully added",
|
||||
"@instance_added": {},
|
||||
"required_field": "required field",
|
||||
"@required_field": {}
|
||||
"@required_field": {},
|
||||
"no_communities_found": "No communities found",
|
||||
"@no_communities_found": {},
|
||||
"network_error": "Network error",
|
||||
"@network_error": {}
|
||||
}
|
||||
|
|
|
@ -123,6 +123,7 @@ abstract class L10nStrings {
|
|||
static const number_of_posts = 'number_of_posts';
|
||||
static const number_of_subscribers = 'number_of_subscribers';
|
||||
static const number_of_users = 'number_of_users';
|
||||
static const number_of_communities = 'number_of_communities';
|
||||
static const unsubscribe = 'unsubscribe';
|
||||
static const subscribe = 'subscribe';
|
||||
static const messages = 'messages';
|
||||
|
@ -145,6 +146,22 @@ abstract class L10nStrings {
|
|||
static const bot_account = 'bot_account';
|
||||
static const show_bot_accounts = 'show_bot_accounts';
|
||||
static const show_read_posts = 'show_read_posts';
|
||||
static const site_not_set_up = 'site_not_set_up';
|
||||
static const nerd_stuff = 'nerd_stuff';
|
||||
static const open_in_browser = 'open_in_browser';
|
||||
static const cannot_open_in_browser = 'cannot_open_in_browser';
|
||||
static const about = 'about';
|
||||
static const see_all = 'see_all';
|
||||
static const admins = 'admins';
|
||||
static const trending_communities = 'trending_communities';
|
||||
static const communities_of_instance = 'communities_of_instance';
|
||||
static const day = 'day';
|
||||
static const week = 'week';
|
||||
static const month = 'month';
|
||||
static const six_months = 'six_months';
|
||||
static const required_field = 'required_field';
|
||||
static const no_communities_found = 'no_communities_found';
|
||||
static const network_error = 'network_error';
|
||||
}
|
||||
|
||||
extension L10nFromString on String {
|
||||
|
@ -406,6 +423,36 @@ extension L10nFromString on String {
|
|||
return L10n.of(context).show_bot_accounts;
|
||||
case L10nStrings.show_read_posts:
|
||||
return L10n.of(context).show_read_posts;
|
||||
case L10nStrings.site_not_set_up:
|
||||
return L10n.of(context).site_not_set_up;
|
||||
case L10nStrings.nerd_stuff:
|
||||
return L10n.of(context).nerd_stuff;
|
||||
case L10nStrings.open_in_browser:
|
||||
return L10n.of(context).open_in_browser;
|
||||
case L10nStrings.cannot_open_in_browser:
|
||||
return L10n.of(context).cannot_open_in_browser;
|
||||
case L10nStrings.about:
|
||||
return L10n.of(context).about;
|
||||
case L10nStrings.see_all:
|
||||
return L10n.of(context).see_all;
|
||||
case L10nStrings.admins:
|
||||
return L10n.of(context).admins;
|
||||
case L10nStrings.trending_communities:
|
||||
return L10n.of(context).trending_communities;
|
||||
case L10nStrings.day:
|
||||
return L10n.of(context).day;
|
||||
case L10nStrings.week:
|
||||
return L10n.of(context).week;
|
||||
case L10nStrings.month:
|
||||
return L10n.of(context).month;
|
||||
case L10nStrings.six_months:
|
||||
return L10n.of(context).six_months;
|
||||
case L10nStrings.required_field:
|
||||
return L10n.of(context).required_field;
|
||||
case L10nStrings.no_communities_found:
|
||||
return L10n.of(context).no_communities_found;
|
||||
case L10nStrings.network_error:
|
||||
return L10n.of(context).network_error;
|
||||
|
||||
default:
|
||||
return this;
|
||||
|
|
|
@ -36,6 +36,36 @@ abstract class _CreatePostStore with Store {
|
|||
bool nsfw;
|
||||
|
||||
final submitState = AsyncStore<PostView>();
|
||||
final searchCommunitiesState = AsyncStore<List<CommunityView>>();
|
||||
|
||||
@action
|
||||
Future<List<CommunityView>?> searchCommunities(
|
||||
String searchTerm,
|
||||
Jwt? token,
|
||||
) {
|
||||
if (searchTerm.isEmpty) {
|
||||
return searchCommunitiesState.runLemmy(
|
||||
instanceHost,
|
||||
ListCommunities(
|
||||
type: PostListingType.all,
|
||||
sort: SortType.topAll,
|
||||
limit: 20,
|
||||
auth: token?.raw,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return searchCommunitiesState.runLemmy(
|
||||
instanceHost,
|
||||
SearchCommunities(
|
||||
q: searchTerm,
|
||||
sort: SortType.topAll,
|
||||
listingType: PostListingType.all,
|
||||
limit: 20,
|
||||
auth: token?.raw,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> submit(Jwt token) async {
|
||||
|
@ -61,3 +91,37 @@ abstract class _CreatePostStore with Store {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
class SearchCommunities implements LemmyApiQuery<List<CommunityView>> {
|
||||
final Search base;
|
||||
|
||||
SearchCommunities({
|
||||
required String q,
|
||||
PostListingType? listingType,
|
||||
SortType? sort,
|
||||
int? page,
|
||||
int? limit,
|
||||
String? auth,
|
||||
}) : base = Search(
|
||||
q: q,
|
||||
type: SearchType.communities,
|
||||
listingType: listingType,
|
||||
sort: sort,
|
||||
page: page,
|
||||
limit: limit,
|
||||
auth: auth,
|
||||
);
|
||||
|
||||
@override
|
||||
String get path => base.path;
|
||||
|
||||
@override
|
||||
HttpMethod get httpMethod => base.httpMethod;
|
||||
|
||||
@override
|
||||
List<CommunityView> responseFactory(Map<String, dynamic> json) =>
|
||||
base.responseFactory(json).communities;
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => base.toJson();
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@ import 'package:freezed_annotation/freezed_annotation.dart';
|
|||
import 'package:lemmy_api_client/v3.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
|
||||
import '../l10n/l10n_from_string.dart';
|
||||
|
||||
part 'async_store.freezed.dart';
|
||||
part 'async_store.g.dart';
|
||||
|
||||
|
@ -51,11 +53,10 @@ abstract class _AsyncStore<T> with Store {
|
|||
|
||||
return result;
|
||||
} on SocketException {
|
||||
// TODO: use an existing l10n key
|
||||
if (data != null) {
|
||||
asyncState = data.copyWith(errorTerm: 'network_error');
|
||||
asyncState = data.copyWith(errorTerm: L10nStrings.network_error);
|
||||
} else {
|
||||
asyncState = const AsyncState.error('network_error');
|
||||
asyncState = const AsyncState.error(L10nStrings.network_error);
|
||||
}
|
||||
} catch (err) {
|
||||
if (data != null) {
|
||||
|
|
|
@ -12,6 +12,7 @@ class Editor extends HookWidget {
|
|||
final int? minLines;
|
||||
final int? maxLines;
|
||||
final String? labelText;
|
||||
final String? initialValue;
|
||||
final bool autofocus;
|
||||
|
||||
/// Whether the editor should be preview the contents
|
||||
|
@ -27,6 +28,7 @@ class Editor extends HookWidget {
|
|||
this.minLines = 5,
|
||||
this.maxLines,
|
||||
this.labelText,
|
||||
this.initialValue,
|
||||
this.fancy = false,
|
||||
required this.instanceHost,
|
||||
this.autofocus = false,
|
||||
|
@ -34,7 +36,7 @@ class Editor extends HookWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final defaultController = useTextEditingController();
|
||||
final defaultController = useTextEditingController(text: initialValue);
|
||||
final actualController = controller ?? defaultController;
|
||||
|
||||
if (fancy) {
|
||||
|
|
Loading…
Reference in New Issue