Compare commits
12 Commits
notificati
...
load-build
| Author | SHA1 | Date | |
|---|---|---|---|
| f4569d8b98 | |||
| 7575895f75 | |||
| 67a9ecf6c6 | |||
| 823fa51275 | |||
|
|
e2c2d54c20 | ||
|
|
6fd53b020e | ||
|
|
a3d6b458b1 | ||
|
|
b1fcb49e7c | ||
|
|
5d9f455fc8 | ||
| c3ff471ea1 | |||
|
|
ac603f66e2 | ||
|
|
9bdd66b9c9 |
@@ -351,8 +351,18 @@ fi
|
|||||||
# Setup application directories
|
# Setup application directories
|
||||||
setup_app_directories
|
setup_app_directories
|
||||||
|
|
||||||
# Load environment from .env file if it exists
|
# Load environment-specific .env file if it exists
|
||||||
load_env_file ".env"
|
env_file=".env.$BUILD_MODE"
|
||||||
|
if [ -f "$env_file" ]; then
|
||||||
|
load_env_file "$env_file"
|
||||||
|
else
|
||||||
|
log_debug "No $env_file file found, using default environment"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load .env file if it exists (fallback)
|
||||||
|
if [ -f ".env" ]; then
|
||||||
|
load_env_file ".env"
|
||||||
|
fi
|
||||||
|
|
||||||
# Handle clean-only mode
|
# Handle clean-only mode
|
||||||
if [ "$CLEAN_ONLY" = true ]; then
|
if [ "$CLEAN_ONLY" = true ]; then
|
||||||
|
|||||||
@@ -341,7 +341,19 @@ main_electron_build() {
|
|||||||
# Setup environment
|
# Setup environment
|
||||||
setup_build_env "electron" "$BUILD_MODE"
|
setup_build_env "electron" "$BUILD_MODE"
|
||||||
setup_app_directories
|
setup_app_directories
|
||||||
load_env_file ".env"
|
|
||||||
|
# Load environment-specific .env file if it exists
|
||||||
|
env_file=".env.$BUILD_MODE"
|
||||||
|
if [ -f "$env_file" ]; then
|
||||||
|
load_env_file "$env_file"
|
||||||
|
else
|
||||||
|
log_debug "No $env_file file found, using default environment"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load .env file if it exists (fallback)
|
||||||
|
if [ -f ".env" ]; then
|
||||||
|
load_env_file ".env"
|
||||||
|
fi
|
||||||
|
|
||||||
# Step 1: Clean Electron build artifacts
|
# Step 1: Clean Electron build artifacts
|
||||||
clean_electron_artifacts
|
clean_electron_artifacts
|
||||||
|
|||||||
@@ -324,8 +324,18 @@ fi
|
|||||||
# Setup application directories
|
# Setup application directories
|
||||||
setup_app_directories
|
setup_app_directories
|
||||||
|
|
||||||
# Load environment from .env file if it exists
|
# Load environment-specific .env file if it exists
|
||||||
load_env_file ".env"
|
env_file=".env.$BUILD_MODE"
|
||||||
|
if [ -f "$env_file" ]; then
|
||||||
|
load_env_file "$env_file"
|
||||||
|
else
|
||||||
|
log_debug "No $env_file file found, using default environment"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load .env file if it exists (fallback)
|
||||||
|
if [ -f ".env" ]; then
|
||||||
|
load_env_file ".env"
|
||||||
|
fi
|
||||||
|
|
||||||
# Validate iOS environment
|
# Validate iOS environment
|
||||||
validate_ios_environment
|
validate_ios_environment
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ const inputImageFileNameRef = ref<Blob>();
|
|||||||
export default class ImageMethodDialog extends Vue {
|
export default class ImageMethodDialog extends Vue {
|
||||||
$notify!: NotifyFunction;
|
$notify!: NotifyFunction;
|
||||||
$router!: Router;
|
$router!: Router;
|
||||||
notify = createNotifyHelpers(this.$notify);
|
notify!: ReturnType<typeof createNotifyHelpers>;
|
||||||
|
|
||||||
/** Active DID for user authentication */
|
/** Active DID for user authentication */
|
||||||
activeDid = "";
|
activeDid = "";
|
||||||
@@ -498,6 +498,9 @@ export default class ImageMethodDialog extends Vue {
|
|||||||
* @throws {Error} When settings retrieval fails
|
* @throws {Error} When settings retrieval fails
|
||||||
*/
|
*/
|
||||||
async mounted() {
|
async mounted() {
|
||||||
|
// Initialize notification helpers
|
||||||
|
this.notify = createNotifyHelpers(this.$notify);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Get activeDid from active_identity table (single source of truth)
|
// Get activeDid from active_identity table (single source of truth)
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ export default class HelpNotificationsView extends Vue {
|
|||||||
notifyingReminderTime = "";
|
notifyingReminderTime = "";
|
||||||
|
|
||||||
// Notification helper system
|
// Notification helper system
|
||||||
notify = createNotifyHelpers(this.$notify);
|
notify!: ReturnType<typeof createNotifyHelpers>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computed property for consistent button styling
|
* Computed property for consistent button styling
|
||||||
@@ -430,6 +430,9 @@ export default class HelpNotificationsView extends Vue {
|
|||||||
* Handles errors gracefully with proper logging without exposing sensitive data.
|
* Handles errors gracefully with proper logging without exposing sensitive data.
|
||||||
*/
|
*/
|
||||||
async mounted() {
|
async mounted() {
|
||||||
|
// Initialize notification helpers
|
||||||
|
this.notify = createNotifyHelpers(this.$notify);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const registration = await navigator.serviceWorker?.ready;
|
const registration = await navigator.serviceWorker?.ready;
|
||||||
const fullSub = await registration?.pushManager.getSubscription();
|
const fullSub = await registration?.pushManager.getSubscription();
|
||||||
|
|||||||
@@ -32,9 +32,9 @@
|
|||||||
@click="expandOffersToUserAndMarkRead()"
|
@click="expandOffersToUserAndMarkRead()"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<router-link to="/recent-offers-to-user" class="text-blue-500">
|
<a class="text-blue-500 cursor-pointer" @click="handleSeeAllOffersToUser">
|
||||||
See all
|
See all
|
||||||
</router-link>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="showOffersDetails" class="ml-4 mt-4">
|
<div v-if="showOffersDetails" class="ml-4 mt-4">
|
||||||
@@ -99,9 +99,12 @@
|
|||||||
@click="expandOffersToUserProjectsAndMarkRead()"
|
@click="expandOffersToUserProjectsAndMarkRead()"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<router-link to="/recent-offers-to-user-projects" class="text-blue-500">
|
<a
|
||||||
|
class="text-blue-500 cursor-pointer"
|
||||||
|
@click="handleSeeAllOffersToUserProjects"
|
||||||
|
>
|
||||||
See all
|
See all
|
||||||
</router-link>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="showOffersToUserProjectsDetails" class="ml-4 mt-4">
|
<div v-if="showOffersToUserProjectsDetails" class="ml-4 mt-4">
|
||||||
@@ -246,7 +249,7 @@ export default class NewActivityView extends Vue {
|
|||||||
|
|
||||||
async expandOffersToUserAndMarkRead() {
|
async expandOffersToUserAndMarkRead() {
|
||||||
this.showOffersDetails = !this.showOffersDetails;
|
this.showOffersDetails = !this.showOffersDetails;
|
||||||
if (this.showOffersDetails) {
|
if (this.showOffersDetails && this.newOffersToUser.length > 0) {
|
||||||
await this.$updateSettings({
|
await this.$updateSettings({
|
||||||
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
|
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
|
||||||
});
|
});
|
||||||
@@ -283,7 +286,10 @@ export default class NewActivityView extends Vue {
|
|||||||
async expandOffersToUserProjectsAndMarkRead() {
|
async expandOffersToUserProjectsAndMarkRead() {
|
||||||
this.showOffersToUserProjectsDetails =
|
this.showOffersToUserProjectsDetails =
|
||||||
!this.showOffersToUserProjectsDetails;
|
!this.showOffersToUserProjectsDetails;
|
||||||
if (this.showOffersToUserProjectsDetails) {
|
if (
|
||||||
|
this.showOffersToUserProjectsDetails &&
|
||||||
|
this.newOffersToUserProjects.length > 0
|
||||||
|
) {
|
||||||
await this.$updateSettings({
|
await this.$updateSettings({
|
||||||
lastAckedOfferToUserProjectsJwtId:
|
lastAckedOfferToUserProjectsJwtId:
|
||||||
this.newOffersToUserProjects[0].jwtId,
|
this.newOffersToUserProjects[0].jwtId,
|
||||||
@@ -291,7 +297,7 @@ export default class NewActivityView extends Vue {
|
|||||||
// note that we don't update this.lastAckedOfferToUserProjectsJwtId in case
|
// note that we don't update this.lastAckedOfferToUserProjectsJwtId in case
|
||||||
// they later choose the last one to keep the offers as new
|
// they later choose the last one to keep the offers as new
|
||||||
this.notify.info(
|
this.notify.info(
|
||||||
"The offers are now marked as viewed. Click in the list to keep them as new.",
|
"The offers are marked as viewed. Click in the list to keep them as new.",
|
||||||
TIMEOUTS.LONG,
|
TIMEOUTS.LONG,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -319,5 +325,13 @@ export default class NewActivityView extends Vue {
|
|||||||
TIMEOUTS.STANDARD,
|
TIMEOUTS.STANDARD,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async handleSeeAllOffersToUser() {
|
||||||
|
this.$router.push("/recent-offers-to-user");
|
||||||
|
}
|
||||||
|
|
||||||
|
async handleSeeAllOffersToUserProjects() {
|
||||||
|
this.$router.push("/recent-offers-to-user-projects");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ export default class QuickActionBvcBeginView extends Vue {
|
|||||||
$router!: Router;
|
$router!: Router;
|
||||||
|
|
||||||
// Notification helper system
|
// Notification helper system
|
||||||
private notify = createNotifyHelpers(this.$notify);
|
private notify!: ReturnType<typeof createNotifyHelpers>;
|
||||||
|
|
||||||
attended = true;
|
attended = true;
|
||||||
gaveTime = true;
|
gaveTime = true;
|
||||||
@@ -111,6 +111,9 @@ export default class QuickActionBvcBeginView extends Vue {
|
|||||||
* Uses America/Denver timezone for Bountiful location
|
* Uses America/Denver timezone for Bountiful location
|
||||||
*/
|
*/
|
||||||
async mounted() {
|
async mounted() {
|
||||||
|
// Initialize notification helpers
|
||||||
|
this.notify = createNotifyHelpers(this.$notify);
|
||||||
|
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"[QuickActionBvcBeginView] Mounted - calculating meeting date",
|
"[QuickActionBvcBeginView] Mounted - calculating meeting date",
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -32,20 +32,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<InfiniteScroll @reached-bottom="loadMoreOffersToUserProjects">
|
<InfiniteScroll @reached-bottom="loadMoreOffersToUserProjects">
|
||||||
<ul
|
<ul data-testId="listRecentOffersToUserProjects">
|
||||||
data-testId="listRecentOffersToUserProjects"
|
|
||||||
class="border-t border-slate-300"
|
|
||||||
>
|
|
||||||
<li
|
<li
|
||||||
v-for="offer in newOffersToUserProjects"
|
v-for="offer in newOffersToUserProjects"
|
||||||
:key="offer.jwtId"
|
:key="offer.jwtId"
|
||||||
class="mt-4 relative group"
|
class="mt-4 relative group"
|
||||||
>
|
>
|
||||||
|
<!-- Last viewed separator -->
|
||||||
<div
|
<div
|
||||||
v-if="offer.jwtId == lastAckedOfferToUserProjectsJwtId"
|
v-if="offer.jwtId == lastAckedOfferToUserProjectsJwtId"
|
||||||
class="border-b border-slate-300 text-orange-400 pb-2 mb-2 font-bold text-sm"
|
class="border-b border-dashed border-slate-300 text-orange-400 mt-4 mb-6 font-bold text-sm"
|
||||||
>
|
>
|
||||||
You've already seen all the following
|
<span class="block w-fit mx-auto -mb-2.5 bg-white px-2">
|
||||||
|
You've already seen all the following
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span>{{
|
<span>{{
|
||||||
@@ -147,6 +147,14 @@ export default class RecentOffersToUserView extends Vue {
|
|||||||
this.newOffersToUserProjects = offersToUserProjectsData.data;
|
this.newOffersToUserProjects = offersToUserProjectsData.data;
|
||||||
this.newOffersToUserProjectsAtEnd = !offersToUserProjectsData.hitLimit;
|
this.newOffersToUserProjectsAtEnd = !offersToUserProjectsData.hitLimit;
|
||||||
|
|
||||||
|
// Mark offers as read after data is loaded
|
||||||
|
if (this.newOffersToUserProjects.length > 0) {
|
||||||
|
await this.$updateSettings({
|
||||||
|
lastAckedOfferToUserProjectsJwtId:
|
||||||
|
this.newOffersToUserProjects[0].jwtId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
logger.error("Error retrieving settings & contacts:", err);
|
logger.error("Error retrieving settings & contacts:", err);
|
||||||
|
|||||||
@@ -27,20 +27,20 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<InfiniteScroll @reached-bottom="loadMoreOffersToUser">
|
<InfiniteScroll @reached-bottom="loadMoreOffersToUser">
|
||||||
<ul
|
<ul data-testId="listRecentOffersToUser">
|
||||||
data-testId="listRecentOffersToUser"
|
|
||||||
class="border-t border-slate-300"
|
|
||||||
>
|
|
||||||
<li
|
<li
|
||||||
v-for="offer in newOffersToUser"
|
v-for="offer in newOffersToUser"
|
||||||
:key="offer.jwtId"
|
:key="offer.jwtId"
|
||||||
class="mt-4 relative group"
|
class="mt-4 relative group"
|
||||||
>
|
>
|
||||||
|
<!-- Last viewed separator -->
|
||||||
<div
|
<div
|
||||||
v-if="offer.jwtId == lastAckedOfferToUserJwtId"
|
v-if="offer.jwtId == lastAckedOfferToUserJwtId"
|
||||||
class="border-b border-slate-300 text-orange-400 pb-2 mb-2 font-bold text-sm"
|
class="border-b border-dashed border-slate-300 text-orange-400 mt-4 mb-6 font-bold text-sm"
|
||||||
>
|
>
|
||||||
You've already seen all the following
|
<span class="block w-fit mx-auto -mb-2.5 bg-white px-2">
|
||||||
|
You've already seen all the following
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span>{{
|
<span>{{
|
||||||
@@ -138,6 +138,13 @@ export default class RecentOffersToUserView extends Vue {
|
|||||||
this.newOffersToUser = offersToUserData.data;
|
this.newOffersToUser = offersToUserData.data;
|
||||||
this.newOffersToUserAtEnd = !offersToUserData.hitLimit;
|
this.newOffersToUserAtEnd = !offersToUserData.hitLimit;
|
||||||
|
|
||||||
|
// Mark offers as read after data is loaded
|
||||||
|
if (this.newOffersToUser.length > 0) {
|
||||||
|
await this.$updateSettings({
|
||||||
|
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
logger.error("Error retrieving settings & contacts:", err);
|
logger.error("Error retrieving settings & contacts:", err);
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ export default class SeedBackupView extends Vue {
|
|||||||
showSeed = false;
|
showSeed = false;
|
||||||
|
|
||||||
// Notification helper system
|
// Notification helper system
|
||||||
notify = createNotifyHelpers(this.$notify);
|
notify!: ReturnType<typeof createNotifyHelpers>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computed property for consistent copy feedback styling
|
* Computed property for consistent copy feedback styling
|
||||||
@@ -204,6 +204,9 @@ export default class SeedBackupView extends Vue {
|
|||||||
* Handles errors gracefully with user notifications.
|
* Handles errors gracefully with user notifications.
|
||||||
*/
|
*/
|
||||||
async created() {
|
async created() {
|
||||||
|
// Initialize notification helpers
|
||||||
|
this.notify = createNotifyHelpers(this.$notify);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let activeDid = "";
|
let activeDid = "";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user