Browse Source

Apply enhanced PlatformServiceMixin to HomeView

Replace 6 settings calls with 4 enhanced utility methods (, ). Simplify database operations with  mixin utility. Eliminate Vue property conflicts and PlatformServiceFactory import. Add consistent error handling across all platform service interactions.
pull/142/head
Matthew Raymer 3 days ago
parent
commit
c754de4d59
  1. 59
      src/views/HomeView.vue

59
src/views/HomeView.vue

@ -320,7 +320,7 @@ import {
} from "../constants/app";
import { logConsoleAndDb } from "../db/index";
import { Contact } from "../db/tables/contacts";
import { BoundingBox, checkIsAnyFeedFilterOn } from "../db/tables/settings";
import { BoundingBox, checkIsAnyFeedFilterOn, MASTER_SETTINGS_KEY } from "../db/tables/settings";
import * as databaseUtil from "../db/databaseUtil";
import {
contactForDid,
@ -342,7 +342,7 @@ import { GiveSummaryRecord } from "../interfaces/records";
import * as serverUtil from "../libs/endorserServer";
import { logger } from "../utils/logger";
import { GiveRecordWithContactInfo } from "../interfaces/give";
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory";
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
import * as Package from "../../package.json";
interface Claim {
@ -427,6 +427,7 @@ interface FeedError {
ImageViewer,
ActivityListItem,
},
mixins: [PlatformServiceMixin],
})
export default class HomeView extends Vue {
$notify!: (notification: NotificationIface, timeout?: number) => void;
@ -537,10 +538,14 @@ export default class HomeView extends Vue {
}
}
// Load settings with better error context
// Load settings with better error context using enhanced mixin
let settings;
try {
settings = await databaseUtil.retrieveSettingsForActiveAccount();
settings = await (this as any).$getSettings(MASTER_SETTINGS_KEY, {
apiServer: "",
activeDid: "",
isRegistered: false,
});
} catch (error) {
logConsoleAndDb(
`[HomeView] Failed to retrieve settings: ${error}`,
@ -605,9 +610,10 @@ export default class HomeView extends Vue {
this.activeDid,
);
if (resp.status === 200) {
const currentSettings = await (this as any).$getSettings(MASTER_SETTINGS_KEY, {});
await databaseUtil.updateDidSpecificSettings(this.activeDid, {
isRegistered: true,
...(await databaseUtil.retrieveSettingsForActiveAccount()),
...currentSettings,
});
this.isRegistered = true;
}
@ -675,19 +681,27 @@ export default class HomeView extends Vue {
}
/**
* Loads user settings from storage
* Loads user settings from storage using enhanced mixin utilities
* Sets component state for:
* - API server
* - Active DID
* - Feed filters and view settings
* - Registration status
* - Notification acknowledgments
* - API server, Active DID, Feed filters and view settings
* - Registration status, Notification acknowledgments
*
* @internal
* Called by mounted() and reloadFeedOnChange()
*/
private async loadSettings() {
const settings = await databaseUtil.retrieveSettingsForActiveAccount();
// Use enhanced mixin utility for default settings - much more concise!
const settings = await (this as any).$getSettings(
MASTER_SETTINGS_KEY,
{
apiServer: "",
activeDid: "",
filterFeedByVisible: false,
filterFeedByNearby: false,
isRegistered: false,
}
);
this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || "";
this.feedLastViewedClaimId = settings.lastViewedClaimId;
@ -711,8 +725,7 @@ export default class HomeView extends Vue {
* Called by mounted() and initializeIdentity()
*/
private async loadContacts() {
const platformService = PlatformServiceFactory.getInstance();
const dbContacts = await platformService.dbQuery("SELECT * FROM contacts");
const dbContacts = await (this as any).$dbQuery("SELECT * FROM contacts");
this.allContacts = databaseUtil.mapQueryResultToValues(
dbContacts,
) as unknown as Contact[];
@ -739,12 +752,10 @@ export default class HomeView extends Vue {
this.activeDid,
);
if (resp.status === 200) {
const settings =
await databaseUtil.retrieveSettingsForActiveAccount();
const currentSettings = await (this as any).$getSettings(MASTER_SETTINGS_KEY, {});
await databaseUtil.updateDidSpecificSettings(this.activeDid, {
apiServer: this.apiServer,
isRegistered: true,
...settings,
...currentSettings,
});
this.isRegistered = true;
}
@ -799,14 +810,14 @@ export default class HomeView extends Vue {
}
/**
* Checks if user needs onboarding
* Checks if user needs onboarding using enhanced mixin utilities
* Opens onboarding dialog if not completed
*
* @internal
* Called by mounted()
*/
private async checkOnboarding() {
const settings = await databaseUtil.retrieveSettingsForActiveAccount();
const settings = await (this as any).$getSettings(MASTER_SETTINGS_KEY, {});
if (!settings.finishedOnboarding) {
(this.$refs.onboardingDialog as OnboardingDialog).open(OnboardPage.Home);
}
@ -866,7 +877,7 @@ export default class HomeView extends Vue {
}
/**
* Reloads feed when filter settings change
* Reloads feed when filter settings change using enhanced mixin utilities
* - Updates filter states
* - Clears existing feed data
* - Triggers new feed load
@ -875,7 +886,11 @@ export default class HomeView extends Vue {
* Called by FeedFilters component when filters change
*/
async reloadFeedOnChange() {
const settings = await databaseUtil.retrieveSettingsForActiveAccount();
const settings = await (this as any).$getMergedSettings(
MASTER_SETTINGS_KEY,
this.activeDid,
{ filterFeedByVisible: false, filterFeedByNearby: false }
);
this.isFeedFilteredByVisible = !!settings.filterFeedByVisible;
this.isFeedFilteredByNearby = !!settings.filterFeedByNearby;
this.isAnyFeedFilterOn = checkIsAnyFeedFilterOn(settings);

Loading…
Cancel
Save