Web
This commit is contained in:
parent
e498e51e3d
commit
399e1b6f4d
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponseClients = '''
|
||||
const dynamic kMockClients = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponseDashboard = '''
|
||||
const dynamic kMockDashboard = '''
|
||||
{
|
||||
"data": {
|
||||
"activities": []
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
const dynamic kMockExpenses = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"total": 0,
|
||||
"count": 0,
|
||||
"per_page": 5000,
|
||||
"current_page": 1,
|
||||
"total_pages": 1,
|
||||
"links": []
|
||||
}
|
||||
}
|
||||
}
|
||||
''';
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponseInvoices = '''
|
||||
const dynamic kMockInvoices = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponseLogin = '''
|
||||
const dynamic kMockLogin = '''
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponsePayments = '''
|
||||
const dynamic kMockPayments = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponseProducts = '''
|
||||
const dynamic kMockProducts = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
const dynamic kMockProjects = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"total": 0,
|
||||
"count": 0,
|
||||
"per_page": 5000,
|
||||
"current_page": 1,
|
||||
"total_pages": 1,
|
||||
"links": []
|
||||
}
|
||||
}
|
||||
}
|
||||
''';
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
const dynamic kAPIResponseQuotes = '''
|
||||
const dynamic kMockQuotes = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
const dynamic kMockTasks = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"total": 0,
|
||||
"count": 0,
|
||||
"per_page": 5000,
|
||||
"current_page": 1,
|
||||
"total_pages": 1,
|
||||
"links": []
|
||||
}
|
||||
}
|
||||
}
|
||||
''';
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
const dynamic kMockVendors = '''
|
||||
{
|
||||
"data": [],
|
||||
"meta": {
|
||||
"pagination": {
|
||||
"total": 0,
|
||||
"count": 0,
|
||||
"per_page": 5000,
|
||||
"current_page": 1,
|
||||
"total_pages": 1,
|
||||
"links": []
|
||||
}
|
||||
}
|
||||
}
|
||||
''';
|
||||
|
|
@ -11,6 +11,7 @@ import 'package:invoiceninja_flutter/data/models/group_model.dart';
|
|||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/task_model.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
|
||||
part 'company_model.g.dart';
|
||||
|
||||
|
|
@ -244,6 +245,20 @@ abstract class CompanyEntity extends Object
|
|||
bool get isEnterprisePlan => isSelfHost || plan == kPlanEnterprise;
|
||||
|
||||
bool isModuleEnabled(EntityType entityType) {
|
||||
if (Config.DEMO_MODE) {
|
||||
if ([
|
||||
//EntityType.recurringInvoice,
|
||||
//EntityType.credit,
|
||||
EntityType.project,
|
||||
EntityType.task,
|
||||
EntityType.expense,
|
||||
EntityType.vendor,
|
||||
].contains(entityType)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO remove this
|
||||
if ([
|
||||
EntityType.recurringInvoice,
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ class AuthRepository {
|
|||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponseLogin);
|
||||
response = json.decode(kMockLogin);
|
||||
} else {
|
||||
response =
|
||||
await webClient.post(url, token ?? '', data: json.encode(data));
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ class ClientRepository {
|
|||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponseClients);
|
||||
response = json.decode(kMockClients);
|
||||
} else {
|
||||
response =
|
||||
await webClient.get(url, credentials.token);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class DashboardRepository {
|
|||
Future<DashboardEntity> loadItem(Credentials connectionInfo) async {
|
||||
dynamic response;
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponseDashboard);
|
||||
response = json.decode(kMockDashboard);
|
||||
} else {
|
||||
response = await webClient.get(
|
||||
connectionInfo.url + '/dashboard?only_activity=true',
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:core';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/mock/mock_expenses.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/serializers.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
|
|
@ -34,7 +36,13 @@ class ExpenseRepository {
|
|||
url += '&updated_at=${updatedAt - kUpdatedAtBufferSeconds}';
|
||||
}
|
||||
|
||||
final dynamic response = await webClient.get(url, credentials.token);
|
||||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kMockExpenses);
|
||||
} else {
|
||||
response = await webClient.get(url, credentials.token);
|
||||
}
|
||||
|
||||
final ExpenseListResponse expenseResponse =
|
||||
serializers.deserializeWith(ExpenseListResponse.serializer, response);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class InvoiceRepository {
|
|||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponseInvoices);
|
||||
response = json.decode(kMockInvoices);
|
||||
} else {
|
||||
response =
|
||||
await webClient.get(url, credentials.token);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class PaymentRepository {
|
|||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponsePayments);
|
||||
response = json.decode(kMockPayments);
|
||||
} else {
|
||||
response =
|
||||
await webClient.get(url, credentials.token);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class ProductRepository {
|
|||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponseProducts);
|
||||
response = json.decode(kMockProducts);
|
||||
} else {
|
||||
response = await webClient.get(url, credentials.token);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:core';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/mock/mock_projects.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/serializers.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
|
|
@ -34,7 +36,13 @@ class ProjectRepository {
|
|||
url += '&updated_at=${updatedAt - kUpdatedAtBufferSeconds}';
|
||||
}
|
||||
|
||||
final dynamic response = await webClient.get(url, credentials.token);
|
||||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kMockProjects);
|
||||
} else {
|
||||
response = await webClient.get(url, credentials.token);
|
||||
}
|
||||
|
||||
final ProjectListResponse projectResponse =
|
||||
serializers.deserializeWith(ProjectListResponse.serializer, response);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class QuoteRepository {
|
|||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kAPIResponseQuotes);
|
||||
response = json.decode(kMockQuotes);
|
||||
} else {
|
||||
response = await webClient.get(url, credentials.token);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:core';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/mock/mock_tasks.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/serializers.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
|
|
@ -33,7 +35,13 @@ class TaskRepository {
|
|||
url += '&updated_at=${updatedAt - kUpdatedAtBufferSeconds}';
|
||||
}
|
||||
|
||||
final dynamic response = await webClient.get(url, credentials.token);
|
||||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kMockTasks);
|
||||
} else {
|
||||
response = await webClient.get(url, credentials.token);
|
||||
}
|
||||
|
||||
final TaskListResponse taskResponse =
|
||||
serializers.deserializeWith(TaskListResponse.serializer, response);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:core';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/mock/mock_vendors.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/serializers.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
|
|
@ -34,7 +36,13 @@ class VendorRepository {
|
|||
url += '&updated_at=${updatedAt - kUpdatedAtBufferSeconds}';
|
||||
}
|
||||
|
||||
final dynamic response = await webClient.get(url, credentials.token);
|
||||
dynamic response;
|
||||
|
||||
if (Config.DEMO_MODE) {
|
||||
response = json.decode(kMockVendors);
|
||||
} else {
|
||||
response = await webClient.get(url, credentials.token);
|
||||
}
|
||||
|
||||
final VendorListResponse vendorResponse =
|
||||
serializers.deserializeWith(VendorListResponse.serializer, response);
|
||||
|
|
|
|||
|
|
@ -69,6 +69,39 @@ class MainScreen extends StatelessWidget {
|
|||
editWidget: QuoteEditScreen(),
|
||||
);
|
||||
break;
|
||||
case ProjectScreen.route:
|
||||
screen = EntityScreens(
|
||||
entityType: EntityType.project,
|
||||
listWidget: ProjectScreenBuilder(),
|
||||
viewWidget: ProjectViewScreen(),
|
||||
editWidget: ProjectEditScreen(),
|
||||
);
|
||||
break;
|
||||
case TaskScreen.route:
|
||||
screen = EntityScreens(
|
||||
entityType: EntityType.task,
|
||||
listWidget: TaskScreenBuilder(),
|
||||
viewWidget: TaskViewScreen(),
|
||||
editWidget: TaskEditScreen(),
|
||||
);
|
||||
break;
|
||||
case VendorScreen.route:
|
||||
screen = EntityScreens(
|
||||
entityType: EntityType.vendor,
|
||||
listWidget: VendorScreenBuilder(),
|
||||
viewWidget: VendorViewScreen(),
|
||||
editWidget: VendorEditScreen(),
|
||||
);
|
||||
break;
|
||||
case ExpenseScreen.route:
|
||||
screen = EntityScreens(
|
||||
entityType: EntityType.expense,
|
||||
listWidget: ExpenseScreenBuilder(),
|
||||
viewWidget: ExpenseViewScreen(),
|
||||
editWidget: ExpenseEditScreen(),
|
||||
);
|
||||
break;
|
||||
|
||||
case SettingsScreen.route:
|
||||
screen = SettingsScreens();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
|
||||
import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
|
||||
import 'package:invoiceninja_flutter/redux/task/task_actions.dart';
|
||||
import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/debug/state_inspector.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/resources/cached_image.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
|
|
@ -166,7 +171,9 @@ class MenuDrawer extends StatelessWidget {
|
|||
children: <Widget>[
|
||||
DrawerTile(
|
||||
company: company,
|
||||
icon: kIsWeb ? Icons.dashboard : FontAwesomeIcons.tachometerAlt,
|
||||
icon: kIsWeb
|
||||
? Icons.dashboard
|
||||
: FontAwesomeIcons.tachometerAlt,
|
||||
title: localization.dashboard,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewDashboard(context: context)),
|
||||
|
|
@ -250,86 +257,86 @@ class MenuDrawer extends StatelessWidget {
|
|||
context: context));
|
||||
},
|
||||
),
|
||||
/*
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.project,
|
||||
icon: getEntityIcon(EntityType.project),
|
||||
title: localization.projects,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewProjectList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditProject(
|
||||
project: ProjectEntity(), context: context));
|
||||
},
|
||||
),
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.task,
|
||||
icon: getEntityIcon(EntityType.task),
|
||||
title: localization.tasks,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewTaskList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditTask(
|
||||
task: TaskEntity(
|
||||
isRunning: state.uiState.autoStartTasks),
|
||||
context: context));
|
||||
},
|
||||
),
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.vendor,
|
||||
icon: getEntityIcon(EntityType.vendor),
|
||||
title: localization.vendors,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewVendorList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditVendor(
|
||||
vendor: VendorEntity(), context: context));
|
||||
},
|
||||
),
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.expense,
|
||||
icon: getEntityIcon(EntityType.expense),
|
||||
title: localization.expenses,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewExpenseList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditExpense(
|
||||
expense: ExpenseEntity(
|
||||
company: company, uiState: state.uiState),
|
||||
context: context));
|
||||
},
|
||||
),
|
||||
*/
|
||||
// STARTER: menu - do not remove comment
|
||||
DrawerTile(
|
||||
company: company,
|
||||
icon: kIsWeb ? Icons.settings : FontAwesomeIcons.cog,
|
||||
title: localization.settings,
|
||||
onTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(ViewSettings(
|
||||
context: context,
|
||||
userCompany: state.userCompany));
|
||||
},
|
||||
),
|
||||
if (Config.DEMO_MODE) ...[
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.project,
|
||||
icon: getEntityIcon(EntityType.project),
|
||||
title: localization.projects,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewProjectList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditProject(
|
||||
project: ProjectEntity(), context: context));
|
||||
},
|
||||
),
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.task,
|
||||
icon: getEntityIcon(EntityType.task),
|
||||
title: localization.tasks,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewTaskList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditTask(
|
||||
task: TaskEntity(
|
||||
isRunning: state.uiState.autoStartTasks),
|
||||
context: context));
|
||||
},
|
||||
),
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.vendor,
|
||||
icon: getEntityIcon(EntityType.vendor),
|
||||
title: localization.vendors,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewVendorList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditVendor(
|
||||
vendor: VendorEntity(), context: context));
|
||||
},
|
||||
),
|
||||
DrawerTile(
|
||||
company: company,
|
||||
entityType: EntityType.expense,
|
||||
icon: getEntityIcon(EntityType.expense),
|
||||
title: localization.expenses,
|
||||
onTap: () =>
|
||||
store.dispatch(ViewExpenseList(context: context)),
|
||||
onCreateTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(EditExpense(
|
||||
expense: ExpenseEntity(
|
||||
company: company, uiState: state.uiState),
|
||||
context: context));
|
||||
},
|
||||
),
|
||||
// STARTER: menu - do not remove comment
|
||||
DrawerTile(
|
||||
company: company,
|
||||
icon: kIsWeb ? Icons.settings : FontAwesomeIcons.cog,
|
||||
title: localization.settings,
|
||||
onTap: () {
|
||||
if (isMobile(context)) {
|
||||
navigator.pop();
|
||||
}
|
||||
store.dispatch(ViewSettings(
|
||||
context: context,
|
||||
userCompany: state.userCompany));
|
||||
},
|
||||
),
|
||||
]
|
||||
],
|
||||
)),
|
||||
Align(
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:core';
|
||||
import 'package:invoiceninja_flutter/.env.dart';
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:invoiceninja_flutter/constants.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/serializers.dart';
|
||||
|
|
|
|||
Loading…
Reference in New Issue