Projects
This commit is contained in:
parent
233f7ea460
commit
ff896f491f
|
|
@ -21,15 +21,14 @@ import 'package:invoiceninja_flutter/redux/product/product_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/client/client_state.dart';
|
import 'package:invoiceninja_flutter/redux/client/client_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
|
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/invoice/invoice_state.dart';
|
import 'package:invoiceninja_flutter/redux/invoice/invoice_state.dart';
|
||||||
|
|
||||||
// STARTER: import - do not remove comment
|
// STARTER: import - do not remove comment
|
||||||
import 'package:invoiceninja_flutter/data/models/project_model.dart';
|
|
||||||
import 'package:invoiceninja_flutter/redux/project/project_state.dart';
|
import 'package:invoiceninja_flutter/redux/project/project_state.dart';
|
||||||
|
|
||||||
import 'package:invoiceninja_flutter/redux/payment/payment_state.dart';
|
import 'package:invoiceninja_flutter/redux/payment/payment_state.dart';
|
||||||
|
|
||||||
import 'package:invoiceninja_flutter/redux/quote/quote_state.dart';
|
import 'package:invoiceninja_flutter/redux/quote/quote_state.dart';
|
||||||
|
|
||||||
|
|
||||||
part 'serializers.g.dart';
|
part 'serializers.g.dart';
|
||||||
|
|
||||||
@SerializersFor(const [
|
@SerializersFor(const [
|
||||||
|
|
@ -78,11 +77,9 @@ part 'serializers.g.dart';
|
||||||
TimezoneItemResponse,
|
TimezoneItemResponse,
|
||||||
TimezoneListResponse,
|
TimezoneListResponse,
|
||||||
// STARTER: serializers - do not remove comment
|
// STARTER: serializers - do not remove comment
|
||||||
ProjectEntity,
|
ProjectEntity,
|
||||||
|
|
||||||
PaymentEntity,
|
|
||||||
|
|
||||||
|
|
||||||
|
PaymentEntity,
|
||||||
])
|
])
|
||||||
final Serializers serializers =
|
final Serializers serializers =
|
||||||
(_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();
|
(_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,12 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/data/web_client.dart';
|
import 'package:invoiceninja_flutter/data/web_client.dart';
|
||||||
|
|
||||||
class ProjectRepository {
|
class ProjectRepository {
|
||||||
final WebClient webClient;
|
|
||||||
|
|
||||||
const ProjectRepository({
|
const ProjectRepository({
|
||||||
this.webClient = const WebClient(),
|
this.webClient = const WebClient(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final WebClient webClient;
|
||||||
|
|
||||||
Future<ProjectEntity> loadItem(
|
Future<ProjectEntity> loadItem(
|
||||||
CompanyEntity company, AuthState auth, int entityId) async {
|
CompanyEntity company, AuthState auth, int entityId) async {
|
||||||
final dynamic response = await webClient.get(
|
final dynamic response = await webClient.get(
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ import 'package:invoiceninja_flutter/ui/app/buttons/refresh_icon_button.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
class ProjectEdit extends StatefulWidget {
|
class ProjectEdit extends StatefulWidget {
|
||||||
final ProjectEditVM viewModel;
|
|
||||||
|
|
||||||
const ProjectEdit({
|
const ProjectEdit({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.viewModel,
|
@required this.viewModel,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final ProjectEditVM viewModel;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_ProjectEditState createState() => _ProjectEditState();
|
_ProjectEditState createState() => _ProjectEditState();
|
||||||
}
|
}
|
||||||
|
|
@ -33,7 +33,7 @@ class _ProjectEditState extends State<ProjectEdit> {
|
||||||
|
|
||||||
_controllers.forEach((controller) => controller.removeListener(_onChanged));
|
_controllers.forEach((controller) => controller.removeListener(_onChanged));
|
||||||
|
|
||||||
final project = widget.viewModel.project;
|
//final project = widget.viewModel.project;
|
||||||
// STARTER: read value - do not remove comment
|
// STARTER: read value - do not remove comment
|
||||||
|
|
||||||
_controllers.forEach((controller) => controller.addListener(_onChanged));
|
_controllers.forEach((controller) => controller.addListener(_onChanged));
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,11 @@ import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/project_model.dart';
|
import 'package:invoiceninja_flutter/data/models/project_model.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/project/edit/project_edit.dart';
|
import 'package:invoiceninja_flutter/ui/project/edit/project_edit.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
|
|
||||||
|
|
||||||
class ProjectEditScreen extends StatelessWidget {
|
class ProjectEditScreen extends StatelessWidget {
|
||||||
|
const ProjectEditScreen({Key key}) : super(key: key);
|
||||||
|
|
||||||
static const String route = '/project/edit';
|
static const String route = '/project/edit';
|
||||||
ProjectEditScreen({Key key}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
@ -31,14 +31,6 @@ class ProjectEditScreen extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProjectEditVM {
|
class ProjectEditVM {
|
||||||
final ProjectEntity project;
|
|
||||||
final Function(ProjectEntity) onChanged;
|
|
||||||
final Function(BuildContext) onSavePressed;
|
|
||||||
final bool isSaving;
|
|
||||||
final ProjectEntity origProject;
|
|
||||||
final Function onBackPressed;
|
|
||||||
final bool isLoading;
|
|
||||||
|
|
||||||
ProjectEditVM({
|
ProjectEditVM({
|
||||||
@required this.project,
|
@required this.project,
|
||||||
@required this.onChanged,
|
@required this.onChanged,
|
||||||
|
|
@ -81,4 +73,12 @@ class ProjectEditVM {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final ProjectEntity project;
|
||||||
|
final Function(ProjectEntity) onChanged;
|
||||||
|
final Function(BuildContext) onSavePressed;
|
||||||
|
final bool isSaving;
|
||||||
|
final ProjectEntity origProject;
|
||||||
|
final Function onBackPressed;
|
||||||
|
final bool isLoading;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ import 'package:invoiceninja_flutter/ui/project/project_list_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
class ProjectList extends StatelessWidget {
|
class ProjectList extends StatelessWidget {
|
||||||
final ProjectListVM viewModel;
|
|
||||||
|
|
||||||
const ProjectList({
|
const ProjectList({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.viewModel,
|
@required this.viewModel,
|
||||||
|
|
@ -116,4 +114,6 @@ class ProjectList extends StatelessWidget {
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final ProjectListVM viewModel;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,6 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
||||||
|
|
||||||
class ProjectListItem extends StatelessWidget {
|
class ProjectListItem extends StatelessWidget {
|
||||||
final UserEntity user;
|
|
||||||
final Function(EntityAction) onEntityAction;
|
|
||||||
final GestureTapCallback onTap;
|
|
||||||
final GestureTapCallback onLongPress;
|
|
||||||
//final ValueChanged<bool> onCheckboxChanged;
|
|
||||||
final ProjectEntity project;
|
|
||||||
final String filter;
|
|
||||||
|
|
||||||
static final projectItemKey = (int id) => Key('__project_item_${id}__');
|
|
||||||
|
|
||||||
const ProjectListItem({
|
const ProjectListItem({
|
||||||
@required this.user,
|
@required this.user,
|
||||||
|
|
@ -26,6 +17,16 @@ class ProjectListItem extends StatelessWidget {
|
||||||
@required this.filter,
|
@required this.filter,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final UserEntity user;
|
||||||
|
final Function(EntityAction) onEntityAction;
|
||||||
|
final GestureTapCallback onTap;
|
||||||
|
final GestureTapCallback onLongPress;
|
||||||
|
//final ValueChanged<bool> onCheckboxChanged;
|
||||||
|
final ProjectEntity project;
|
||||||
|
final String filter;
|
||||||
|
|
||||||
|
static final projectItemKey = (int id) => Key('__project_item_${id}__');
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final filterMatch = filter != null && filter.isNotEmpty
|
final filterMatch = filter != null && filter.isNotEmpty
|
||||||
|
|
|
||||||
|
|
@ -30,17 +30,6 @@ class ProjectListBuilder extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProjectListVM {
|
class ProjectListVM {
|
||||||
final UserEntity user;
|
|
||||||
final List<int> projectList;
|
|
||||||
final BuiltMap<int, ProjectEntity> projectMap;
|
|
||||||
final String filter;
|
|
||||||
final bool isLoading;
|
|
||||||
final bool isLoaded;
|
|
||||||
final Function(BuildContext, ProjectEntity) onProjectTap;
|
|
||||||
final Function(BuildContext, ProjectEntity, DismissDirection) onDismissed;
|
|
||||||
final Function(BuildContext) onRefreshed;
|
|
||||||
final Function(BuildContext, ProjectEntity, EntityAction) onEntityAction;
|
|
||||||
|
|
||||||
ProjectListVM({
|
ProjectListVM({
|
||||||
@required this.user,
|
@required this.user,
|
||||||
@required this.projectList,
|
@required this.projectList,
|
||||||
|
|
@ -132,4 +121,15 @@ class ProjectListVM {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final UserEntity user;
|
||||||
|
final List<int> projectList;
|
||||||
|
final BuiltMap<int, ProjectEntity> projectMap;
|
||||||
|
final String filter;
|
||||||
|
final bool isLoading;
|
||||||
|
final bool isLoaded;
|
||||||
|
final Function(BuildContext, ProjectEntity) onProjectTap;
|
||||||
|
final Function(BuildContext, ProjectEntity, DismissDirection) onDismissed;
|
||||||
|
final Function(BuildContext) onRefreshed;
|
||||||
|
final Function(BuildContext, ProjectEntity, EntityAction) onEntityAction;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,13 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/data/web_client.dart';
|
import 'package:invoiceninja_flutter/data/web_client.dart';
|
||||||
|
|
||||||
class StubRepository {
|
class StubRepository {
|
||||||
final WebClient webClient;
|
|
||||||
|
|
||||||
const StubRepository({
|
const StubRepository({
|
||||||
this.webClient = const WebClient(),
|
this.webClient = const WebClient(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final WebClient webClient;
|
||||||
|
|
||||||
Future<StubEntity> loadItem(
|
Future<StubEntity> loadItem(
|
||||||
CompanyEntity company, AuthState auth, int entityId) async {
|
CompanyEntity company, AuthState auth, int entityId) async {
|
||||||
final dynamic response = await webClient.get(
|
final dynamic response = await webClient.get(
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ import 'package:invoiceninja_flutter/ui/app/buttons/refresh_icon_button.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
class StubEdit extends StatefulWidget {
|
class StubEdit extends StatefulWidget {
|
||||||
final StubEditVM viewModel;
|
|
||||||
|
|
||||||
const StubEdit({
|
const StubEdit({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.viewModel,
|
@required this.viewModel,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final StubEditVM viewModel;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_StubEditState createState() => _StubEditState();
|
_StubEditState createState() => _StubEditState();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,10 @@ import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/stub_model.dart';
|
import 'package:invoiceninja_flutter/data/models/stub_model.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart';
|
import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
|
|
||||||
|
|
||||||
class StubEditScreen extends StatelessWidget {
|
class StubEditScreen extends StatelessWidget {
|
||||||
|
const StubEditScreen({Key key}) : super(key: key);
|
||||||
static const String route = '/stub/edit';
|
static const String route = '/stub/edit';
|
||||||
StubEditScreen({Key key}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
@ -31,12 +30,6 @@ class StubEditScreen extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class StubEditVM {
|
class StubEditVM {
|
||||||
final StubEntity stub;
|
|
||||||
final Function(StubEntity) onChanged;
|
|
||||||
final Function(BuildContext) onSavePressed;
|
|
||||||
final Function onBackPressed;
|
|
||||||
final bool isLoading;
|
|
||||||
|
|
||||||
StubEditVM({
|
StubEditVM({
|
||||||
@required this.stub,
|
@required this.stub,
|
||||||
@required this.onChanged,
|
@required this.onChanged,
|
||||||
|
|
@ -77,4 +70,10 @@ class StubEditVM {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final StubEntity stub;
|
||||||
|
final Function(StubEntity) onChanged;
|
||||||
|
final Function(BuildContext) onSavePressed;
|
||||||
|
final Function onBackPressed;
|
||||||
|
final bool isLoading;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ import 'package:invoiceninja_flutter/ui/stub/stub_list_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
class StubList extends StatelessWidget {
|
class StubList extends StatelessWidget {
|
||||||
final StubListVM viewModel;
|
|
||||||
|
|
||||||
const StubList({
|
const StubList({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.viewModel,
|
@required this.viewModel,
|
||||||
|
|
@ -116,4 +114,6 @@ class StubList extends StatelessWidget {
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final StubListVM viewModel;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,6 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
|
||||||
|
|
||||||
class StubListItem extends StatelessWidget {
|
class StubListItem extends StatelessWidget {
|
||||||
final UserEntity user;
|
|
||||||
final Function(EntityAction) onEntityAction;
|
|
||||||
final GestureTapCallback onTap;
|
|
||||||
final GestureTapCallback onLongPress;
|
|
||||||
//final ValueChanged<bool> onCheckboxChanged;
|
|
||||||
final StubEntity stub;
|
|
||||||
final String filter;
|
|
||||||
|
|
||||||
static final stubItemKey = (int id) => Key('__stub_item_${id}__');
|
|
||||||
|
|
||||||
const StubListItem({
|
const StubListItem({
|
||||||
@required this.user,
|
@required this.user,
|
||||||
|
|
@ -26,6 +17,16 @@ class StubListItem extends StatelessWidget {
|
||||||
@required this.filter,
|
@required this.filter,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final UserEntity user;
|
||||||
|
final Function(EntityAction) onEntityAction;
|
||||||
|
final GestureTapCallback onTap;
|
||||||
|
final GestureTapCallback onLongPress;
|
||||||
|
//final ValueChanged<bool> onCheckboxChanged;
|
||||||
|
final StubEntity stub;
|
||||||
|
final String filter;
|
||||||
|
|
||||||
|
static final stubItemKey = (int id) => Key('__stub_item_${id}__');
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final filterMatch = filter != null && filter.isNotEmpty
|
final filterMatch = filter != null && filter.isNotEmpty
|
||||||
|
|
|
||||||
|
|
@ -30,17 +30,6 @@ class StubListBuilder extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class StubListVM {
|
class StubListVM {
|
||||||
final UserEntity user;
|
|
||||||
final List<int> stubList;
|
|
||||||
final BuiltMap<int, StubEntity> stubMap;
|
|
||||||
final String filter;
|
|
||||||
final bool isLoading;
|
|
||||||
final bool isLoaded;
|
|
||||||
final Function(BuildContext, StubEntity) onStubTap;
|
|
||||||
final Function(BuildContext, StubEntity, DismissDirection) onDismissed;
|
|
||||||
final Function(BuildContext) onRefreshed;
|
|
||||||
final Function(BuildContext, StubEntity, EntityAction) onEntityAction;
|
|
||||||
|
|
||||||
StubListVM({
|
StubListVM({
|
||||||
@required this.user,
|
@required this.user,
|
||||||
@required this.stubList,
|
@required this.stubList,
|
||||||
|
|
@ -132,4 +121,15 @@ class StubListVM {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final UserEntity user;
|
||||||
|
final List<int> stubList;
|
||||||
|
final BuiltMap<int, StubEntity> stubMap;
|
||||||
|
final String filter;
|
||||||
|
final bool isLoading;
|
||||||
|
final bool isLoaded;
|
||||||
|
final Function(BuildContext, StubEntity) onStubTap;
|
||||||
|
final Function(BuildContext, StubEntity, DismissDirection) onDismissed;
|
||||||
|
final Function(BuildContext) onRefreshed;
|
||||||
|
final Function(BuildContext, StubEntity, EntityAction) onEntityAction;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue