Skip to content
Merged
Show file tree
Hide file tree
Changes from 110 commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
41f2191
docs: capture initial times
damian-molinski Oct 14, 2025
71dc0fb
chore: remove cacheDocument
damian-molinski Oct 14, 2025
913dbfe
turn off logging
damian-molinski Oct 14, 2025
1d1df95
chore: use debugPrint instead of logger
damian-molinski Oct 14, 2025
64211fb
feat: bulk documents save
damian-molinski Oct 16, 2025
80ad2ac
batching sync
damian-molinski Oct 16, 2025
0d28bc3
chore: move exact ref resoling to getDocumentData instead of index
damian-molinski Oct 16, 2025
737c738
fix: DocumentRepository
damian-molinski Oct 16, 2025
61181ac
chore: simplify getting documents data
damian-molinski Oct 16, 2025
c46152b
remove getAllDocumentsRefs and getCachedDocumentsRefs from DocumentRe…
damian-molinski Oct 17, 2025
00e043d
chore: update docs
damian-molinski Oct 17, 2025
91b8e8a
Merge feat/face-performance-optimization-3352 into feat/documents_ind…
damian-molinski Oct 17, 2025
9cae1af
simplified document index endpoint
damian-molinski Oct 17, 2025
7fb96c4
remove randomness from LocalCatGateway
damian-molinski Oct 17, 2025
bf5ef8e
indexing by batch size
damian-molinski Oct 17, 2025
744e90f
wip: filtering by types
damian-molinski Oct 17, 2025
dbc6220
Rework filtering refs + checking all refs if already cached in parallel
damian-molinski Oct 20, 2025
cca0f61
docs
damian-molinski Oct 20, 2025
b44d0fa
update indexing.csv
damian-molinski Oct 20, 2025
3447cbb
update indexing csv
damian-molinski Oct 20, 2025
37b779b
Merge branch 'feat/face-performance-optimization-3352' into feat/docu…
damian-molinski Oct 20, 2025
7d5ca0f
chore: cleanup
damian-molinski Oct 20, 2025
87fce14
trailing new line
damian-molinski Oct 20, 2025
e6121ec
chore
damian-molinski Oct 20, 2025
abceccb
move performance tab to docs
damian-molinski Oct 21, 2025
e5d2d9e
bulk saving typed docs in parallel
damian-molinski Oct 21, 2025
8affeea
chore: revert hardcoded timestamp
damian-molinski Oct 21, 2025
c55fe99
chore: typos
damian-molinski Oct 21, 2025
7499081
Merge feat/face-performance-optimization-3352 into feat/documents_ind…
damian-molinski Oct 21, 2025
547429d
split _sync into smaller functions + add documentation
damian-molinski Oct 21, 2025
8c3fc8e
little refactor
damian-molinski Oct 21, 2025
d8f6674
fix: analyzer
damian-molinski Oct 21, 2025
e5ef512
Merge feat/face-performance-optimization-3352 into feat/database_opti…
damian-molinski Oct 23, 2025
206d2c1
initial v2 tables
damian-molinski Oct 24, 2025
6000884
wip
damian-molinski Oct 24, 2025
c35ee54
wip
damian-molinski Oct 27, 2025
cd4388f
feat: database migration
damian-molinski Oct 27, 2025
ddead17
Merge branch 'feat/database_optimization_3528' into feat/database_opt…
damian-molinski Oct 27, 2025
c1b325b
chore: cleanup
damian-molinski Oct 27, 2025
3cb81d0
bump batch size
damian-molinski Oct 27, 2025
665f47e
cleanup
damian-molinski Oct 27, 2025
33cda42
chore: remove defensive content decoding
damian-molinski Oct 27, 2025
a7ea4ed
chore: daos
damian-molinski Oct 27, 2025
ed01732
spelling
damian-molinski Oct 27, 2025
7f497ff
saveAll
damian-molinski Oct 27, 2025
be8233f
test on platform
damian-molinski Oct 27, 2025
d671da1
chore: update build scripts
damian-molinski Oct 27, 2025
92dfe47
oMerge branch 'feat/database_optimization_3528_part1' into feat/datab…
damian-molinski Oct 27, 2025
a5c681a
feat: DocumentsV2Dao methods
damian-molinski Oct 27, 2025
1f387b2
simple proposals pagination query
damian-molinski Oct 27, 2025
3b1fa7d
chore: create a JoinedProposalBriefEntity
damian-molinski Oct 27, 2025
ee54e67
rename method
damian-molinski Oct 27, 2025
6b9ab3c
feat: exclude hidden proposals
damian-molinski Oct 28, 2025
988a2e6
more tests
damian-molinski Oct 28, 2025
976a606
renaming and splitting logic into smaller parts
damian-molinski Oct 28, 2025
3dbaeed
feat: per language strategy
damian-molinski Oct 28, 2025
54229c3
remove CatalystDatabaseLanguage in favor of raw queries as they are e…
damian-molinski Oct 28, 2025
8c048ac
remove Index Strategy Documentation
damian-molinski Oct 29, 2025
93009d8
handle case where ref is empty
damian-molinski Oct 29, 2025
df39b3b
migration now includes indexes
damian-molinski Oct 29, 2025
3e8a137
use v2 documents table for saveAll and isCachedBulk
damian-molinski Oct 29, 2025
53cdd96
adds ActionType to JoinedProposalBriefEntity
damian-molinski Oct 29, 2025
a15b83c
adds versionIds to JoinedProposalBriefEntity
damian-molinski Oct 29, 2025
624a021
comments count
damian-molinski Oct 29, 2025
64e208b
adds isFavorite to JoinedProposalBriefEntity
damian-molinski Oct 29, 2025
7e9a9b0
add template to JoinedProposalBriefEntity
damian-molinski Oct 30, 2025
7cf109f
adds documentsLocalMetadata table for auto updates
damian-molinski Oct 30, 2025
1db5318
Update docs
damian-molinski Oct 30, 2025
2b404f0
use v2 proposals query for discovery most recent section
damian-molinski Oct 30, 2025
5e94d09
feat: simplify most recent proposals section
damian-molinski Oct 30, 2025
3ee0b22
add proposal fav status for v2 tables
damian-molinski Oct 30, 2025
4e3f95c
local proposal fav status update
damian-molinski Oct 30, 2025
37ccfc0
update fav state locally for faster feedback
damian-molinski Oct 30, 2025
37fd0ea
self review
damian-molinski Oct 31, 2025
6f1d412
fix tests
damian-molinski Oct 31, 2025
0c46ebc
update times
damian-molinski Oct 31, 2025
8f97f78
fix: analyzer
damian-molinski Oct 31, 2025
f2283b1
more migration test data
damian-molinski Oct 31, 2025
adb9b1a
clean up constructors
damian-molinski Oct 31, 2025
dd14d87
cleanup
damian-molinski Oct 31, 2025
a15d7ee
fix: template tests
damian-molinski Oct 31, 2025
fe18381
Merge branch 'feat/database_optimization_3528_part1' into feat/databa…
damian-molinski Oct 31, 2025
a30e83f
spelling
damian-molinski Oct 31, 2025
c5613a5
fix: spelling
damian-molinski Oct 31, 2025
2f5e8aa
Merge branch 'feat/database_optimization_3528_part1' into feat/databa…
damian-molinski Oct 31, 2025
3494db5
chore: PR review adjustments
damian-molinski Oct 31, 2025
f23144b
add order parameter
damian-molinski Oct 31, 2025
aa3946b
ProposalsOrder docs
damian-molinski Oct 31, 2025
ddaabbb
GetProposalsBriefPage supports order
damian-molinski Oct 31, 2025
b48c51a
add filters object
damian-molinski Oct 31, 2025
1a0fe4f
proposalsBriefPage filtering
damian-molinski Nov 2, 2025
1401e8f
fix: status filtering
damian-molinski Nov 2, 2025
2fbac90
more draft proposals filtering tests
damian-molinski Nov 2, 2025
73c02c7
Campaign proposals filter
damian-molinski Nov 2, 2025
d81c1cb
update docs
damian-molinski Nov 2, 2025
aa8c19c
expose getVisibleProposalsCount and tests
damian-molinski Nov 3, 2025
bfbe047
expose filters parameter
damian-molinski Nov 3, 2025
9fb55e6
integrate proposals page with v2 queries
damian-molinski Nov 3, 2025
964dc8f
chore: increase time diff between proposals
damian-molinski Nov 3, 2025
bbbe4ee
chore: reduce count query tables watched when not needed
damian-molinski Nov 3, 2025
7cd6cca
local proposals cubit
damian-molinski Nov 4, 2025
9014f00
local proposal fav staus update
damian-molinski Nov 4, 2025
e39e388
docs
damian-molinski Nov 4, 2025
a16db4f
fix: add discovery specific colors (#3637)
LynxLynxx Nov 4, 2025
627a948
fix code-generator earthly target
damian-molinski Nov 4, 2025
5c77e43
use logger in migration + wrap in transaction
damian-molinski Nov 4, 2025
b4a2ef9
Merge feat/database_optimization_3528_part1 into feat/database_optimi…
damian-molinski Nov 4, 2025
b74dee8
Merge branch 'feat/database_optimization_3528_part2' of github.com:in…
damian-molinski Nov 4, 2025
a37fe49
Merge branch 'feat/database_optimization_3528_part2' into feat/databa…
damian-molinski Nov 4, 2025
10c7fcf
spelling
damian-molinski Nov 4, 2025
dd23637
Merge feat/database_optimization_3528 into feat/database_optimization…
damian-molinski Nov 5, 2025
ece746c
Merge branch 'feat/database_optimization_3528' into feat/database_opt…
damian-molinski Nov 5, 2025
3ddcb22
rename category to categoryId for better consistency
damian-molinski Nov 5, 2025
ed6eb83
proposals per tab selector
damian-molinski Nov 5, 2025
d5ebc6a
release completed in close
damian-molinski Nov 5, 2025
452862e
extract early return logic into function
damian-molinski Nov 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .config/dictionaries/project.dic
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,7 @@ Utxos
uuidv
varint
Vespr
vers
vite
vitss
vkey
Expand Down
7 changes: 7 additions & 0 deletions catalyst_voices/Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,14 @@ code-generator:

LET gen_code_path = lib/generated/api
LET local_gen_code_path = packages/internal/catalyst_voices_repositories/lib/generated/api/
LET local_gen_db_code_path = packages/internal/catalyst_voices_repositories/test/src/database/migration/catalyst_database/generated/

WORKDIR packages/internal/catalyst_voices_repositories

WORKDIR /frontend

RUN melos l10n
RUN melos build-db-migration
RUN melos build-runner
RUN melos build-runner-repository

Expand All @@ -58,6 +60,11 @@ code-generator:
-o -name "*.drift.dart" \))
SAVE ARTIFACT $generated_file AS LOCAL $generated_file
END

# Save database migration generated files
WORKDIR packages/internal/catalyst_voices_repositories/test/src/database/migration/catalyst_database
SAVE ARTIFACT generated/* AS LOCAL $local_gen_db_code_path
WORKDIR /frontend
ELSE
SAVE ARTIFACT .
END
Expand Down
3 changes: 0 additions & 3 deletions catalyst_voices/apps/voices/lib/app/view/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,6 @@ class _AppState extends State<App> {
BlocProvider<SessionCubit>(
create: (_) => Dependencies.instance.get<SessionCubit>(),
),
BlocProvider<ProposalsCubit>(
create: (_) => Dependencies.instance.get<ProposalsCubit>(),
),
BlocProvider<VotingCubit>(
create: (_) => Dependencies.instance.get<VotingCubit>(),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ final class Dependencies extends DependencyProvider {
blockchainConfig: get<AppConfig>().blockchain,
);
})
..registerLazySingleton<ProposalsCubit>(
..registerFactory<ProposalsCubit>(
() => ProposalsCubit(
get<UserService>(),
get<CampaignService>(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:catalyst_voices/common/ext/build_context_ext.dart';
import 'package:catalyst_voices/routes/routing/spaces_route.dart';
import 'package:catalyst_voices/widgets/buttons/voices_filled_button.dart';
import 'package:catalyst_voices/widgets/buttons/voices_outlined_button.dart';
import 'package:catalyst_voices/widgets/heroes/section_hero.dart';
import 'package:catalyst_voices_assets/catalyst_voices_assets.dart';
import 'package:catalyst_voices_blocs/catalyst_voices_blocs.dart';
import 'package:catalyst_voices_brands/catalyst_voices_brands.dart';
import 'package:catalyst_voices_localization/catalyst_voices_localization.dart';
import 'package:catalyst_voices_shared/catalyst_voices_shared.dart';
import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart';
Expand Down Expand Up @@ -54,15 +54,15 @@ class _CampaignBrief extends StatelessWidget {
key: const Key('CampaignBriefTitle'),
context.l10n.heroSectionTitle,
style: Theme.of(context).textTheme.displaySmall?.copyWith(
color: ThemeBuilder.buildTheme().colorScheme.primary,
color: context.colors.discoveryPrimary,
),
),
const SizedBox(height: 32),
Text(
key: const Key('CampaignBriefDescription'),
context.l10n.projectCatalystDescription,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
color: ThemeBuilder.buildTheme().colors.textOnPrimaryLevel0,
color: context.colors.discoveryTextOnPrimary,
),
),
const SizedBox(height: 32),
Expand All @@ -74,8 +74,8 @@ class _CampaignBrief extends StatelessWidget {
const ProposalsRoute().go(context);
},
style: FilledButton.styleFrom(
backgroundColor: ThemeBuilder.buildTheme().colorScheme.primary,
foregroundColor: ThemeBuilder.buildTheme().colorScheme.onPrimary,
backgroundColor: context.colors.discoveryPrimary,
foregroundColor: context.colors.discoveryOnPrimary,
),
child: Text(context.l10n.viewProposals),
),
Expand Down Expand Up @@ -103,8 +103,8 @@ class _DiscoveryMyProposalsButton extends StatelessWidget {
const WorkspaceRoute().go(context);
},
style: OutlinedButton.styleFrom(
backgroundColor: ThemeBuilder.buildTheme().colorScheme.primary,
foregroundColor: ThemeBuilder.buildTheme().colorScheme.onPrimary,
backgroundColor: context.colors.discoveryPrimary,
foregroundColor: context.colors.discoveryOnPrimary,
),
child: Text(context.l10n.myProposals),
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,99 +1,12 @@
import 'package:catalyst_voices/pages/discovery/sections/most_recent_proposals/recent_proposals.dart';
import 'package:catalyst_voices/widgets/indicators/voices_error_indicator.dart';
import 'package:catalyst_voices_blocs/catalyst_voices_blocs.dart';
import 'package:catalyst_voices_localization/catalyst_voices_localization.dart';
import 'package:catalyst_voices/pages/discovery/sections/most_recent_proposals/widgets/most_recent_offstage.dart';
import 'package:catalyst_voices/pages/discovery/sections/most_recent_proposals/widgets/recent_proposals.dart';
import 'package:flutter/material.dart';

class MostRecentProposals extends StatelessWidget {
const MostRecentProposals({super.key});

@override
Widget build(BuildContext context) {
return BlocSelector<DiscoveryCubit, DiscoveryState, DiscoveryMostRecentProposalsState>(
selector: (state) => state.proposals,
builder: (context, state) {
return _MostRecentProposals(data: state);
},
);
}
}

class _MostRecentProposals extends StatelessWidget {
final DiscoveryMostRecentProposalsState data;
const _MostRecentProposals({
required this.data,
});

@override
Widget build(BuildContext context) {
return Stack(
children: [
_MostRecentProposalsError(data),
_ViewAllProposals(
offstage: data.showError || !data.hasMinProposalsToShow,
),
_MostRecentProposalsData(
data,
minProposalsToShow: data.hasMinProposalsToShow,
),
],
);
}
}

class _MostRecentProposalsData extends StatelessWidget {
final DiscoveryMostRecentProposalsState state;
final bool minProposalsToShow;

const _MostRecentProposalsData(this.state, {this.minProposalsToShow = false});

@override
Widget build(BuildContext context) {
return Offstage(
key: const Key('MostRecentProposalsData'),
offstage: state.showError || !minProposalsToShow,
child: RecentProposals(proposals: state.proposals),
);
}
}

class _MostRecentProposalsError extends StatelessWidget {
final DiscoveryMostRecentProposalsState state;

const _MostRecentProposalsError(this.state);

@override
Widget build(BuildContext context) {
final errorMessage = state.error?.message(context);
return Offstage(
key: const Key('MostRecentError'),
offstage: !state.showError,
child: Padding(
padding: const EdgeInsets.all(16),
child: Center(
child: VoicesErrorIndicator(
message: errorMessage ?? context.l10n.somethingWentWrong,
onRetry: () async {
await context.read<DiscoveryCubit>().getMostRecentProposals();
},
),
),
),
);
}
}

class _ViewAllProposals extends StatelessWidget {
final bool offstage;

const _ViewAllProposals({this.offstage = true});

@override
Widget build(BuildContext context) {
return Offstage(
key: const Key('MostRecentProposalsData'),
offstage: !offstage,
child: const ViewAllProposals(),
);
return const MostRecentOffstage(child: RecentProposals());
}
}
Loading
Loading