simpo-component-library 3.6.963 → 3.6.967
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/sections/blog-list/blog-category.model.mjs +13 -0
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +78 -13
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +1084 -728
- package/esm2022/lib/services/rest.service.mjs +218 -121
- package/fesm2022/simpo-component-library.mjs +1319 -792
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/sections/blog-list/blog-category.model.d.ts +13 -0
- package/lib/sections/blog-list/blog-list.component.d.ts +14 -1
- package/lib/sections/view-blog/view-blog.component.d.ts +26 -2
- package/lib/services/rest.service.d.ts +9 -7
- package/package.json +1 -1
- package/simpo-component-library-3.6.967.tgz +0 -0
- package/simpo-component-library-3.6.963.tgz +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i3 from '@angular/common';
|
|
2
|
-
import { CommonModule, isPlatformBrowser, NgStyle, NgFor, DOCUMENT, NgIf } from '@angular/common';
|
|
2
|
+
import { CommonModule, isPlatformBrowser, NgStyle, NgFor, DOCUMENT, DatePipe, NgIf } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Component, Input, EventEmitter, Injectable, Directive, HostListener, ElementRef, Renderer2, forwardRef, Inject, inject, PLATFORM_ID, Output, ViewChild, Pipe, InjectionToken, Optional, NgModule, ViewChildren } from '@angular/core';
|
|
5
5
|
import { MatGridListModule } from '@angular/material/grid-list';
|
|
@@ -2599,6 +2599,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2599
2599
|
args: [LOCAL_STORAGE]
|
|
2600
2600
|
}] }] });
|
|
2601
2601
|
|
|
2602
|
+
class BlogCategory {
|
|
2603
|
+
constructor(json) {
|
|
2604
|
+
this.id = json?.['id'];
|
|
2605
|
+
this.businessId = json?.['businessId'];
|
|
2606
|
+
this.categoryName = json?.['categoryName'];
|
|
2607
|
+
this.description = json?.['description'];
|
|
2608
|
+
this.blogsCreatedCount = json?.['blogsCreatedCount'];
|
|
2609
|
+
this.createdById = json?.['createdById'];
|
|
2610
|
+
this.createdByName = json?.['createdByName'];
|
|
2611
|
+
this.createdTimeStamp = json?.['createdTimeStamp'];
|
|
2612
|
+
}
|
|
2613
|
+
}
|
|
2614
|
+
|
|
2602
2615
|
class Product {
|
|
2603
2616
|
// createdTimeStamp: string
|
|
2604
2617
|
// updatedTimeStamp: string
|
|
@@ -2670,7 +2683,9 @@ class checkItemAlreadyAdded {
|
|
|
2670
2683
|
}
|
|
2671
2684
|
|
|
2672
2685
|
class RestService {
|
|
2673
|
-
constructor(http, BASE_URL, ECOMMERCE_URL, CMIS_URL, cookieService, storage, PASSBOOK_URL, APPOINTMENT_URL
|
|
2686
|
+
constructor(http, BASE_URL, ECOMMERCE_URL, CMIS_URL, cookieService, storage, PASSBOOK_URL, APPOINTMENT_URL
|
|
2687
|
+
// @Inject(RECOMMENDATION_URL) private RECOMMENDATION_URL: string
|
|
2688
|
+
) {
|
|
2674
2689
|
this.http = http;
|
|
2675
2690
|
this.BASE_URL = BASE_URL;
|
|
2676
2691
|
this.ECOMMERCE_URL = ECOMMERCE_URL;
|
|
@@ -2690,7 +2705,8 @@ class RestService {
|
|
|
2690
2705
|
}
|
|
2691
2706
|
// passBookUrl: string = "https://prod-passbook.simpo.ai/";
|
|
2692
2707
|
getBusinessDetails() {
|
|
2693
|
-
this.isJewellery =
|
|
2708
|
+
this.isJewellery =
|
|
2709
|
+
this.storage.getItem('isMaterialBasedPricing') == 'true' ? true : false;
|
|
2694
2710
|
}
|
|
2695
2711
|
ngOnDestroy() {
|
|
2696
2712
|
if (this.environmentTypeSubscriber)
|
|
@@ -2698,36 +2714,60 @@ class RestService {
|
|
|
2698
2714
|
}
|
|
2699
2715
|
getFeaturedProduct(collectionId) {
|
|
2700
2716
|
this.getBusinessDetails();
|
|
2701
|
-
let subIndustryId = this.storage.getItem(
|
|
2717
|
+
let subIndustryId = this.storage.getItem('subIndustryId');
|
|
2702
2718
|
if (!subIndustryId)
|
|
2703
|
-
subIndustryId =
|
|
2704
|
-
return this.http
|
|
2719
|
+
subIndustryId = '';
|
|
2720
|
+
return this.http
|
|
2721
|
+
.get(this.BASE_URL +
|
|
2722
|
+
`ecommerce/product/collection/id?collectionId=${collectionId}&isJewellery=${this.isJewellery}`)
|
|
2723
|
+
.pipe(map((response) => response.data?.map((product) => new Product(product))));
|
|
2705
2724
|
}
|
|
2706
2725
|
getCategoriesByCollectionId(collectionId) {
|
|
2707
|
-
return this.http
|
|
2726
|
+
return this.http
|
|
2727
|
+
.get(this.BASE_URL +
|
|
2728
|
+
`ecommerce/inventory/category/collectionId?collectionId=${collectionId}`)
|
|
2729
|
+
.pipe(map((response) => response.data?.map((category) => new Category(category))));
|
|
2708
2730
|
}
|
|
2709
2731
|
// https://newdev-api.simpo.ai/
|
|
2710
2732
|
getAllCategoriesByBusinessId(payload) {
|
|
2711
2733
|
return this.http.put(this.BASE_URL + `ecommerce/inventory/get/category`, payload);
|
|
2712
2734
|
}
|
|
2735
|
+
// GET blog/getAll/categories/{businessId} — backend throws "No Categories Found" when empty;
|
|
2736
|
+
// callers should treat that as an empty list, not an error state.
|
|
2737
|
+
getBlogCategories(businessId) {
|
|
2738
|
+
return this.http
|
|
2739
|
+
.get(this.BASE_URL + `business/blog/getAll/categories/${businessId}`)
|
|
2740
|
+
.pipe(map((response) => response.data?.map((category) => new BlogCategory(category)) ??
|
|
2741
|
+
[]));
|
|
2742
|
+
}
|
|
2743
|
+
// GET blog/{businessId}/blog-list?businessId={businessId}&categoryId={categoryId}
|
|
2744
|
+
// Note: the path {businessId} segment is unused server-side per the API doc, but must still be
|
|
2745
|
+
// populated identically to the query param — this is the documented URL shape, not a typo.
|
|
2746
|
+
getBlogsByCategory(businessId, categoryId) {
|
|
2747
|
+
return this.http.get(this.BASE_URL +
|
|
2748
|
+
`business/blog/${businessId}/blog-list?businessId=${businessId}&categoryId=${categoryId}`);
|
|
2749
|
+
}
|
|
2713
2750
|
getPassbookOrderStatus(orderId) {
|
|
2714
2751
|
const token = this.getToken();
|
|
2715
2752
|
const headers = new HttpHeaders({
|
|
2716
|
-
|
|
2753
|
+
Authorization: `Bearer ${token}`,
|
|
2717
2754
|
});
|
|
2718
|
-
return this.http.post(this.PASSBOOK_URL +
|
|
2755
|
+
return this.http.post(this.PASSBOOK_URL +
|
|
2756
|
+
`passbook/manual/payment/status?paymentOrderId=${orderId}`, {}, { headers: headers });
|
|
2719
2757
|
}
|
|
2720
2758
|
getProductBySelectedCategory(categoryId) {
|
|
2721
2759
|
return this.http.get(this.BASE_URL + `ecommerce/product/${categoryId}`);
|
|
2722
2760
|
}
|
|
2723
2761
|
getAllSchemes(userId, storeId) {
|
|
2724
|
-
return this.http.get(this.PASSBOOK_URL +
|
|
2762
|
+
return this.http.get(this.PASSBOOK_URL +
|
|
2763
|
+
`ext/connect/simpo/user?userId=${userId}&storeId=${storeId}`);
|
|
2725
2764
|
}
|
|
2726
2765
|
getAllRedemptionSchemes() {
|
|
2727
2766
|
return this.http.get(this.orraBaseUrl + `passBook/redemption/amount/check?userCode=C_000313885`);
|
|
2728
2767
|
}
|
|
2729
2768
|
getAllProducts(payload) {
|
|
2730
|
-
return this.http.put(this.BASE_URL +
|
|
2769
|
+
return this.http.put(this.BASE_URL +
|
|
2770
|
+
`ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload);
|
|
2731
2771
|
}
|
|
2732
2772
|
getProductDetails(productId = null) {
|
|
2733
2773
|
this.getBusinessDetails();
|
|
@@ -2735,11 +2775,14 @@ class RestService {
|
|
|
2735
2775
|
pageNo: 0,
|
|
2736
2776
|
pageSize: 1,
|
|
2737
2777
|
itemId: productId,
|
|
2738
|
-
subIndustryId: this.storage.getItem(
|
|
2739
|
-
userId: this.storage.getItem(
|
|
2740
|
-
request:
|
|
2778
|
+
subIndustryId: this.storage.getItem('subIndustryId'),
|
|
2779
|
+
userId: this.storage.getItem('perId') ?? null,
|
|
2780
|
+
request: 'USER',
|
|
2741
2781
|
};
|
|
2742
|
-
return this.http
|
|
2782
|
+
return this.http
|
|
2783
|
+
.put(this.BASE_URL +
|
|
2784
|
+
`ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload)
|
|
2785
|
+
.pipe(map((response) => response.data.data.map((product) => new Product(product))));
|
|
2743
2786
|
}
|
|
2744
2787
|
getProductDetailsV2(slugName = null) {
|
|
2745
2788
|
this.getBusinessDetails();
|
|
@@ -2747,97 +2790,118 @@ class RestService {
|
|
|
2747
2790
|
pageNo: 0,
|
|
2748
2791
|
pageSize: 1,
|
|
2749
2792
|
slugifiedName: slugName,
|
|
2750
|
-
subIndustryId: this.storage.getItem(
|
|
2751
|
-
businessId: this.storage.getItem(
|
|
2752
|
-
userId: this.storage.getItem(
|
|
2753
|
-
request:
|
|
2793
|
+
subIndustryId: this.storage.getItem('subIndustryId'),
|
|
2794
|
+
businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
|
|
2795
|
+
userId: this.storage.getItem('perId') ?? null,
|
|
2796
|
+
request: 'USER',
|
|
2754
2797
|
};
|
|
2755
|
-
return this.http
|
|
2798
|
+
return this.http
|
|
2799
|
+
.put(this.BASE_URL +
|
|
2800
|
+
`ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload)
|
|
2801
|
+
.pipe(map((response) => response.data.data.map((product) => new Product(product))));
|
|
2756
2802
|
}
|
|
2757
2803
|
getCollectionByIds(collectionIds) {
|
|
2758
2804
|
const payload = {
|
|
2759
|
-
ids: collectionIds
|
|
2805
|
+
ids: collectionIds,
|
|
2760
2806
|
};
|
|
2761
|
-
return this.http
|
|
2807
|
+
return this.http
|
|
2808
|
+
.put(this.BASE_URL + `ecommerce/inventory/collection/list/all`, payload)
|
|
2809
|
+
.pipe(map((response) => response.data?.map((collection) => new Collection(collection))));
|
|
2762
2810
|
}
|
|
2763
2811
|
getAllCategories() {
|
|
2764
|
-
const businessId = this.storage.getItem(
|
|
2765
|
-
const subIndustryId = this.storage.getItem(
|
|
2766
|
-
|
|
2812
|
+
const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
|
|
2813
|
+
const subIndustryId = this.storage.getItem('subIndustryId') ??
|
|
2814
|
+
localStorage.getItem('subIndustryId') ??
|
|
2815
|
+
'';
|
|
2816
|
+
return this.http
|
|
2817
|
+
.get(this.BASE_URL +
|
|
2818
|
+
`ecommerce/inventory/featured?businessId=${businessId}&subId=${subIndustryId}`)
|
|
2819
|
+
.pipe(map((response) => response.data?.map((category) => new Category(category))));
|
|
2767
2820
|
}
|
|
2768
2821
|
getAllCollections() {
|
|
2769
2822
|
const payload = {
|
|
2770
2823
|
pageNo: 0,
|
|
2771
2824
|
pageSize: 100,
|
|
2772
|
-
request:
|
|
2773
|
-
businessId: this.storage.getItem(
|
|
2825
|
+
request: 'USER',
|
|
2826
|
+
businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
|
|
2774
2827
|
};
|
|
2775
|
-
return this.http
|
|
2828
|
+
return this.http
|
|
2829
|
+
.put(this.BASE_URL + 'ecommerce/inventory/get/collection', payload)
|
|
2830
|
+
.pipe(map((response) => response.data.data?.map((collection) => new Collection(collection))));
|
|
2776
2831
|
}
|
|
2777
2832
|
getFilteredProduct(collectionIds, categoryIds, searchText, minPrice, maxPrice, minRating, maxRating, sortBy, pageNo, size) {
|
|
2778
2833
|
this.getBusinessDetails();
|
|
2779
2834
|
let payload = {
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
request:
|
|
2835
|
+
businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
|
|
2836
|
+
subIndustryId: this.storage.getItem('subIndustryId'),
|
|
2837
|
+
collectionId: collectionIds,
|
|
2838
|
+
categoryId: categoryIds,
|
|
2839
|
+
searchText: searchText,
|
|
2840
|
+
sortBy: sortBy,
|
|
2841
|
+
pageNo: pageNo,
|
|
2842
|
+
pageSize: size,
|
|
2843
|
+
userId: this.storage.getItem('perId') ?? null,
|
|
2844
|
+
request: 'USER',
|
|
2790
2845
|
};
|
|
2791
2846
|
if (minPrice > 0)
|
|
2792
|
-
payload[
|
|
2847
|
+
payload['minPrice'] = minPrice;
|
|
2793
2848
|
if (maxPrice > 0)
|
|
2794
|
-
payload[
|
|
2849
|
+
payload['maxPrice'] = maxPrice;
|
|
2795
2850
|
if (minRating > 0)
|
|
2796
|
-
payload[
|
|
2851
|
+
payload['minRating'] = minRating;
|
|
2797
2852
|
if (maxRating > 0)
|
|
2798
|
-
payload[
|
|
2799
|
-
return this.http
|
|
2853
|
+
payload['maxRating'] = maxRating;
|
|
2854
|
+
return this.http
|
|
2855
|
+
.put(this.BASE_URL +
|
|
2856
|
+
`ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload)
|
|
2857
|
+
.pipe(map((response) => {
|
|
2800
2858
|
return {
|
|
2801
2859
|
count: response.data.count,
|
|
2802
2860
|
minPrice: response.data.minPrice,
|
|
2803
2861
|
maxPrice: response.data.maxPrice,
|
|
2804
|
-
data: response.data.data?.map((product) => new Product(product))
|
|
2862
|
+
data: response.data.data?.map((product) => new Product(product)),
|
|
2805
2863
|
};
|
|
2806
2864
|
}));
|
|
2807
2865
|
}
|
|
2808
2866
|
getProductByCategoryId(categoryId) {
|
|
2809
2867
|
this.getBusinessDetails();
|
|
2810
2868
|
const payload = {
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
request:
|
|
2869
|
+
businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
|
|
2870
|
+
categoryId: [categoryId],
|
|
2871
|
+
subIndustryId: this.storage.getItem('subIndustryId'),
|
|
2872
|
+
pageNo: 0,
|
|
2873
|
+
pageSize: 10,
|
|
2874
|
+
userId: this.storage.getItem('perId') ?? null,
|
|
2875
|
+
request: 'USER',
|
|
2818
2876
|
};
|
|
2819
|
-
return this.http
|
|
2877
|
+
return this.http
|
|
2878
|
+
.put(this.BASE_URL +
|
|
2879
|
+
`ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload)
|
|
2880
|
+
.pipe(map((response) => {
|
|
2820
2881
|
return {
|
|
2821
2882
|
count: response.count,
|
|
2822
|
-
data: response.data.data?.map((product) => new Product(product))
|
|
2883
|
+
data: response.data.data?.map((product) => new Product(product)),
|
|
2823
2884
|
};
|
|
2824
2885
|
}));
|
|
2825
2886
|
}
|
|
2826
2887
|
getProductByCollectionId(collectionId) {
|
|
2827
2888
|
this.getBusinessDetails();
|
|
2828
2889
|
const payload = {
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
request:
|
|
2890
|
+
businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
|
|
2891
|
+
collectionId: [collectionId],
|
|
2892
|
+
subIndustryId: this.storage.getItem('subIndustryId'),
|
|
2893
|
+
pageNo: 0,
|
|
2894
|
+
pageSize: 10,
|
|
2895
|
+
userId: this.storage.getItem('perId') ?? null,
|
|
2896
|
+
request: 'USER',
|
|
2836
2897
|
};
|
|
2837
|
-
return this.http
|
|
2898
|
+
return this.http
|
|
2899
|
+
.put(this.BASE_URL +
|
|
2900
|
+
`ecommerce/product/item/search?isJewellery=${this.isJewellery}`, payload)
|
|
2901
|
+
.pipe(map((response) => {
|
|
2838
2902
|
return {
|
|
2839
2903
|
count: response.count,
|
|
2840
|
-
data: response.data.data?.map((product) => new Product(product))
|
|
2904
|
+
data: response.data.data?.map((product) => new Product(product)),
|
|
2841
2905
|
};
|
|
2842
2906
|
}));
|
|
2843
2907
|
}
|
|
@@ -2848,25 +2912,30 @@ class RestService {
|
|
|
2848
2912
|
return this.http.put(this.BASE_URL + `ecommerce/user/filter/reviews?productId=${productId}`, null);
|
|
2849
2913
|
}
|
|
2850
2914
|
generateOTP(mobile, countryCode) {
|
|
2851
|
-
const businessId = this.storage.getItem(
|
|
2852
|
-
return this.http.post(this.BASE_URL +
|
|
2915
|
+
const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
|
|
2916
|
+
return this.http.post(this.BASE_URL +
|
|
2917
|
+
`ecommerce/user/otp/trigger?mobile=${mobile}&countryCode=${countryCode}&businessId=${businessId}`, null);
|
|
2853
2918
|
}
|
|
2854
2919
|
verifyOTP(mobile, otp, deviceInfo) {
|
|
2855
|
-
const businessId = this.storage.getItem(
|
|
2856
|
-
return this.http.put(this.BASE_URL +
|
|
2920
|
+
const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
|
|
2921
|
+
return this.http.put(this.BASE_URL +
|
|
2922
|
+
`ecommerce/user/authenticate?mobile=${mobile}&otp=${otp}&businessId=${businessId}`, deviceInfo);
|
|
2857
2923
|
}
|
|
2858
2924
|
resendOTP(mobile, countryCode) {
|
|
2859
|
-
const businessId = this.storage.getItem(
|
|
2860
|
-
return this.http.post(this.BASE_URL +
|
|
2925
|
+
const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
|
|
2926
|
+
return this.http.post(this.BASE_URL +
|
|
2927
|
+
`ecommerce/user/resend?mobile=${mobile}&countryCode=${countryCode}&businessId=${businessId}`, null);
|
|
2861
2928
|
}
|
|
2862
2929
|
applicableDiscountList(cartId) {
|
|
2863
|
-
return this.http.get(this.BASE_URL +
|
|
2930
|
+
return this.http.get(this.BASE_URL +
|
|
2931
|
+
`ecommerce/order/discount-coupon/${cartId}/applicability/list`);
|
|
2864
2932
|
}
|
|
2865
2933
|
addItemToDB(userCart) {
|
|
2866
2934
|
return this.http.post(this.BASE_URL + `ecommerce/order/cart`, userCart);
|
|
2867
2935
|
}
|
|
2868
2936
|
getUserItems(userId, cartType) {
|
|
2869
|
-
return this.http.get(this.BASE_URL +
|
|
2937
|
+
return this.http.get(this.BASE_URL +
|
|
2938
|
+
`ecommerce/order/cart?userId=${userId}&cartType=${cartType}`);
|
|
2870
2939
|
}
|
|
2871
2940
|
getUserInfo(userId) {
|
|
2872
2941
|
return this.http.put(this.BASE_URL + `ecommerce/user/get/user?userId=${userId}`, null);
|
|
@@ -2896,14 +2965,15 @@ class RestService {
|
|
|
2896
2965
|
return this.http.post(this.ECOMMERCE_URL + `payment/status`, payloadWithJewellery);
|
|
2897
2966
|
}
|
|
2898
2967
|
getRecentViewProduct(userId) {
|
|
2899
|
-
return this.http
|
|
2900
|
-
|
|
2968
|
+
return this.http
|
|
2969
|
+
.post(this.BASE_URL + `ecommerce/user/recentView?userId=${userId}`, null)
|
|
2970
|
+
.pipe(map((response) => response.data?.map((product) => new Product(product))));
|
|
2901
2971
|
}
|
|
2902
2972
|
sendSignupOTP(payload) {
|
|
2903
2973
|
return this.http.post(this.BASE_URL + `ecommerce/user/signup/otp/trigger`, payload);
|
|
2904
2974
|
}
|
|
2905
2975
|
verifySignupOTP(payload) {
|
|
2906
|
-
const businessId = this.storage.getItem(
|
|
2976
|
+
const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
|
|
2907
2977
|
// payload["businessId"] = businessId;
|
|
2908
2978
|
return this.http.put(this.BASE_URL + `ecommerce/user/authenticate/signup`, payload);
|
|
2909
2979
|
}
|
|
@@ -2911,44 +2981,54 @@ class RestService {
|
|
|
2911
2981
|
return this.http.put(this.BASE_URL + `ecommerce/user/authenticate/login`, passData);
|
|
2912
2982
|
}
|
|
2913
2983
|
endUserRefferalDetails(userId, referralUniqueId) {
|
|
2914
|
-
return this.http.post(this.BASE_URL +
|
|
2984
|
+
return this.http.post(this.BASE_URL +
|
|
2985
|
+
`ecommerce/api/end-user/referralDetails?userId=${userId}&referralUniqueId=${referralUniqueId}`, {});
|
|
2915
2986
|
}
|
|
2916
2987
|
createAppointment(data) {
|
|
2917
2988
|
return this.http.post(this.BASE_URL + `crm/appointment/add`, data);
|
|
2918
2989
|
}
|
|
2919
2990
|
getAllLocation(businessId, size, page) {
|
|
2920
|
-
return this.http.get(this.BASE_URL +
|
|
2991
|
+
return this.http.get(this.BASE_URL +
|
|
2992
|
+
`crm/appointment/config/location?businessId=${businessId}&size=${size}&page=${page}`);
|
|
2921
2993
|
}
|
|
2922
2994
|
getAllTimeSlots(locationId, date) {
|
|
2923
|
-
return this.http.get(this.BASE_URL +
|
|
2995
|
+
return this.http.get(this.BASE_URL +
|
|
2996
|
+
`crm/appointment/config/timeslots?locationId=${locationId}&date=${date}`);
|
|
2924
2997
|
}
|
|
2925
2998
|
getAllService(businessId, size, page, locationId) {
|
|
2926
2999
|
if (!locationId) {
|
|
2927
|
-
return this.http.get(this.BASE_URL +
|
|
3000
|
+
return this.http.get(this.BASE_URL +
|
|
3001
|
+
`crm/appointment/config/service?businessId=${businessId}&size=${size}&page=${page}`);
|
|
2928
3002
|
}
|
|
2929
3003
|
else {
|
|
2930
|
-
return this.http.get(this.BASE_URL +
|
|
3004
|
+
return this.http.get(this.BASE_URL +
|
|
3005
|
+
`crm/appointment/config/service?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}`);
|
|
2931
3006
|
}
|
|
2932
3007
|
}
|
|
2933
3008
|
getAllStaffByLocation(businessId, size, page, locationId, serviceId) {
|
|
2934
3009
|
if (!serviceId) {
|
|
2935
|
-
return this.http.get(this.BASE_URL +
|
|
3010
|
+
return this.http.get(this.BASE_URL +
|
|
3011
|
+
`crm/appointment/config/staff?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}`);
|
|
2936
3012
|
}
|
|
2937
3013
|
else {
|
|
2938
|
-
return this.http.get(this.BASE_URL +
|
|
3014
|
+
return this.http.get(this.BASE_URL +
|
|
3015
|
+
`crm/appointment/config/staff?businessId=${businessId}&size=${size}&page=${page}&locationId=${locationId}&serviceId=${serviceId}`);
|
|
2939
3016
|
}
|
|
2940
3017
|
}
|
|
2941
3018
|
getAvailableSlots(data) {
|
|
2942
3019
|
return this.http.put(this.BASE_URL + `crm/appointment/config/available/timeslots`, data);
|
|
2943
3020
|
}
|
|
2944
3021
|
getSelectedListFields(bId, showInErp, formName) {
|
|
2945
|
-
return this.http.get(this.CMIS_URL +
|
|
3022
|
+
return this.http.get(this.CMIS_URL +
|
|
3023
|
+
`crm/fields?businessId=${bId}&status=true&showInForm=${showInErp}&isPagination=false&fieldCategory=${formName}`);
|
|
2946
3024
|
}
|
|
2947
3025
|
getActiveSubscriptionForFeeStructure(businessId, gradeId) {
|
|
2948
|
-
return this.http.get(this.CMIS_URL +
|
|
3026
|
+
return this.http.get(this.CMIS_URL +
|
|
3027
|
+
`crm/subscription/plan/list?businessId=${businessId}&gradeId=${gradeId}&status=true&isDeleted=false`);
|
|
2949
3028
|
}
|
|
2950
3029
|
createAdmission(payload) {
|
|
2951
|
-
return this.http.post(this.CMIS_URL +
|
|
3030
|
+
return this.http.post(this.CMIS_URL +
|
|
3031
|
+
`crm/registration/admission?registrationId=${payload?.registrationId || ''}`, payload);
|
|
2952
3032
|
}
|
|
2953
3033
|
createPaymentLink(data) {
|
|
2954
3034
|
return this.http.post(this.CMIS_URL + `crm/registration/admission/v2/payment?isFromWeb=true`, data);
|
|
@@ -2958,7 +3038,8 @@ class RestService {
|
|
|
2958
3038
|
}
|
|
2959
3039
|
getSubscriptionForFeeStructure(gradeId) {
|
|
2960
3040
|
const businessId = this.storage.getItem('businessId');
|
|
2961
|
-
return this.http.get(this.CMIS_URL +
|
|
3041
|
+
return this.http.get(this.CMIS_URL +
|
|
3042
|
+
`crm/subscription/plan/list?businessId=${businessId}&gradeId=${gradeId}`);
|
|
2962
3043
|
}
|
|
2963
3044
|
getFeeStructure(payload) {
|
|
2964
3045
|
return this.http.put(this.CMIS_URL + `crm/fee/structure`, payload);
|
|
@@ -2995,18 +3076,22 @@ class RestService {
|
|
|
2995
3076
|
const websiteDataRaw = this.storage.getItem('websiteData');
|
|
2996
3077
|
const websiteData = this.safeParse(websiteDataRaw);
|
|
2997
3078
|
// prefer templateId from bDetails; else fallback to websiteData.homePageId
|
|
2998
|
-
const templateId = (details?.templateId ??
|
|
3079
|
+
const templateId = (details?.templateId ??
|
|
3080
|
+
websiteData?.homePageId ??
|
|
3081
|
+
'').toString();
|
|
2999
3082
|
return this.http.get(this.BASE_URL + `business/v3/website/${templateId}/pages/list`);
|
|
3000
3083
|
}
|
|
3001
3084
|
getEcommerceConfigs() {
|
|
3002
|
-
const businessId = this.storage.getItem('businessId') ??
|
|
3085
|
+
const businessId = this.storage.getItem('businessId') ??
|
|
3086
|
+
'1f10651f-9258-6b63-9d23-a3d691aceb88';
|
|
3003
3087
|
return this.http.get(this.BASE_URL + `ecommerce/ecommerce/config/all?businessId=${businessId}`);
|
|
3004
3088
|
}
|
|
3005
3089
|
postVideoCallDetails(payload) {
|
|
3006
3090
|
return this.http.post(this.BASE_URL + `ecommerce/ecommerce/config/video-call`, payload);
|
|
3007
3091
|
}
|
|
3008
3092
|
getStoreLocatorDetails(pincode) {
|
|
3009
|
-
return this.http.get(this.BASE_URL +
|
|
3093
|
+
return this.http.get(this.BASE_URL +
|
|
3094
|
+
`ecommerce/store/nearby?pincode=${pincode}&businessId=${this.storage.getItem('businessId')}`);
|
|
3010
3095
|
}
|
|
3011
3096
|
saveImagesToBusinessLibrary(mediaRequest) {
|
|
3012
3097
|
return this.http.post(this.BASE_URL + `admin/library/image/library/save`, mediaRequest);
|
|
@@ -3015,32 +3100,36 @@ class RestService {
|
|
|
3015
3100
|
return this.http.post(this.BASE_URL + `admin/content/suggest/v2/website/individual`, request);
|
|
3016
3101
|
}
|
|
3017
3102
|
getCategoriesHeaderData() {
|
|
3018
|
-
return this.http.get(this.BASE_URL +
|
|
3103
|
+
return this.http.get(this.BASE_URL +
|
|
3104
|
+
`ecommerce/product/${this.storage.getItem('businessId')}/headers`);
|
|
3019
3105
|
}
|
|
3020
3106
|
getAllStores(payload) {
|
|
3021
3107
|
let url = '';
|
|
3022
3108
|
if (payload?.pincode && payload.pincode.toString().length == 6) {
|
|
3023
3109
|
url = url + ` &pincode=${payload.pincode}`;
|
|
3024
3110
|
}
|
|
3025
|
-
return this.http.put(this.BASE_URL +
|
|
3111
|
+
return this.http.put(this.BASE_URL +
|
|
3112
|
+
`ecommerce/store/get/v2?businessId=${payload.businessId}${url}`, '');
|
|
3026
3113
|
}
|
|
3027
3114
|
getAllAppointmentService(payload) {
|
|
3028
3115
|
return this.http.put(this.APPOINTMENT_URL + 'service/list', payload);
|
|
3029
3116
|
}
|
|
3030
3117
|
getAllStaff(payload) {
|
|
3031
|
-
return this.http.get(this.BASE_URL +
|
|
3118
|
+
return this.http.get(this.BASE_URL +
|
|
3119
|
+
`staff/staff/store-staff-list?serviceId=${payload.serviceId}&storeId=${payload.storeId}&businessId=${payload.businessId}`);
|
|
3032
3120
|
}
|
|
3033
3121
|
getStoreById(storeId) {
|
|
3034
3122
|
let payload = {
|
|
3035
3123
|
storeId: storeId,
|
|
3036
|
-
businessId: this.storage.getItem('businessId') ??
|
|
3124
|
+
businessId: this.storage.getItem('businessId') ?? '',
|
|
3037
3125
|
pageNo: 0,
|
|
3038
|
-
pageSize: 1000
|
|
3126
|
+
pageSize: 1000,
|
|
3039
3127
|
};
|
|
3040
3128
|
return this.http.put(this.BASE_URL + `ecommerce/store/get`, payload);
|
|
3041
3129
|
}
|
|
3042
3130
|
postNewsLetter(email) {
|
|
3043
|
-
return this.http.post(this.BASE_URL +
|
|
3131
|
+
return this.http.post(this.BASE_URL +
|
|
3132
|
+
`ecommerce/ecommerce/config/registered/newsletter?email=${email}&businessId=${this.storage.getItem('businessId')}`, '');
|
|
3044
3133
|
}
|
|
3045
3134
|
addReviewToProduct(payload) {
|
|
3046
3135
|
return this.http.post(this.BASE_URL + `ecommerce/user/add/review?orderId=${payload.orderId}`, payload);
|
|
@@ -3081,16 +3170,19 @@ class RestService {
|
|
|
3081
3170
|
}
|
|
3082
3171
|
getHomeAppointmentList(userId) {
|
|
3083
3172
|
const businessId = this.storage.getItem('bId');
|
|
3084
|
-
return this.http.get(this.BASE_URL +
|
|
3173
|
+
return this.http.get(this.BASE_URL +
|
|
3174
|
+
`ecommerce/user/try-home?userId=${userId}&businessId=${businessId}`);
|
|
3085
3175
|
}
|
|
3086
3176
|
getAllOrraScheme() {
|
|
3087
3177
|
return this.http.get('https://stageapi-orra.letsmobility.com/passBook/redemption/amount/check?userCode=C_000313885');
|
|
3088
3178
|
}
|
|
3089
3179
|
redeemScheme(scheme, cartId, action) {
|
|
3090
|
-
return this.http.post(this.BASE_URL +
|
|
3180
|
+
return this.http.post(this.BASE_URL +
|
|
3181
|
+
`ecommerce/order/cart/redemption?cartId=${cartId}&removeScheme=${action}`, scheme);
|
|
3091
3182
|
}
|
|
3092
3183
|
getReviewsByProductId(productId, pageNumber) {
|
|
3093
|
-
return this.http.put(this.BASE_URL +
|
|
3184
|
+
return this.http.put(this.BASE_URL +
|
|
3185
|
+
`ecommerce/user/filter/reviews?productId=${productId}&pageNumber=${pageNumber}&pageSize=3`, {});
|
|
3094
3186
|
}
|
|
3095
3187
|
getFieldsToDisplay(fieldsList) {
|
|
3096
3188
|
let map = {};
|
|
@@ -3098,7 +3190,9 @@ class RestService {
|
|
|
3098
3190
|
for (let fieldGroup of field.fieldGroup) {
|
|
3099
3191
|
if (!fieldGroup.fieldStepId)
|
|
3100
3192
|
continue;
|
|
3101
|
-
let stepName = fieldGroup.fieldStepName
|
|
3193
|
+
let stepName = fieldGroup.fieldStepName
|
|
3194
|
+
? fieldGroup.fieldStepName
|
|
3195
|
+
: 'undefined';
|
|
3102
3196
|
let groupName = fieldGroup.fieldGroupName;
|
|
3103
3197
|
if (!map[stepName]) {
|
|
3104
3198
|
map[stepName] = {};
|
|
@@ -3136,7 +3230,8 @@ class RestService {
|
|
|
3136
3230
|
return this.http.put(this.APPOINTMENT_URL + `booking/group/complete/${groupId}`, {});
|
|
3137
3231
|
}
|
|
3138
3232
|
getMyBookings(businessId, userId) {
|
|
3139
|
-
return this.http.get(this.APPOINTMENT_URL +
|
|
3233
|
+
return this.http.get(this.APPOINTMENT_URL +
|
|
3234
|
+
`booking/group/my?businessId=${businessId}&userId=${userId}`);
|
|
3140
3235
|
}
|
|
3141
3236
|
getGroupLines(groupId) {
|
|
3142
3237
|
return this.http.get(this.APPOINTMENT_URL + `booking/group/${groupId}/lines`);
|
|
@@ -3146,10 +3241,12 @@ class RestService {
|
|
|
3146
3241
|
return this.http.put(this.APPOINTMENT_URL + `booking/group/${groupId}/cancel${query}`, {});
|
|
3147
3242
|
}
|
|
3148
3243
|
getCancellationPolicy(businessId) {
|
|
3149
|
-
return this.http.get(this.APPOINTMENT_URL +
|
|
3244
|
+
return this.http.get(this.APPOINTMENT_URL +
|
|
3245
|
+
`policy-masters/${businessId}?policyType=CANCELLATION`);
|
|
3150
3246
|
}
|
|
3151
3247
|
generateToken(bId, userId) {
|
|
3152
|
-
return this.http.post(this.PASSBOOK_URL +
|
|
3248
|
+
return this.http.post(this.PASSBOOK_URL +
|
|
3249
|
+
`ext/connect/simpo/token?businessId=${bId}&userId=${userId}&userType=EXTERNAL_USER`, {});
|
|
3153
3250
|
}
|
|
3154
3251
|
getAllEnrolledSchemes(payload) {
|
|
3155
3252
|
return this.http.put(this.PASSBOOK_URL + 'ext/connect/simpo/scheme/list', payload);
|
|
@@ -3157,7 +3254,7 @@ class RestService {
|
|
|
3157
3254
|
enrollScheme(payload, checkCharges) {
|
|
3158
3255
|
const token = this.getToken();
|
|
3159
3256
|
const headers = new HttpHeaders({
|
|
3160
|
-
|
|
3257
|
+
Authorization: `Bearer ${token}`,
|
|
3161
3258
|
});
|
|
3162
3259
|
if (checkCharges) {
|
|
3163
3260
|
return this.http.post(this.PASSBOOK_URL + 'passbook/cart/initiate/payment?manualPay=true', payload, { headers: headers });
|
|
@@ -3169,19 +3266,22 @@ class RestService {
|
|
|
3169
3266
|
getBenefitSlab(passbookId) {
|
|
3170
3267
|
const token = this.getToken();
|
|
3171
3268
|
const headers = new HttpHeaders({
|
|
3172
|
-
|
|
3269
|
+
Authorization: `Bearer ${token}`,
|
|
3173
3270
|
});
|
|
3174
|
-
return this.http.post(this.PASSBOOK_URL +
|
|
3271
|
+
return this.http.post(this.PASSBOOK_URL +
|
|
3272
|
+
`passbook/benefit/percentages?passbookId=${passbookId}`, {}, { headers: headers });
|
|
3175
3273
|
}
|
|
3176
3274
|
getAllStaffList() {
|
|
3177
|
-
return this.http.get(this.BASE_URL +
|
|
3275
|
+
return this.http.get(this.BASE_URL +
|
|
3276
|
+
`staff/staff/list/${this.storage.getItem('businessId')}?isPagination=false`);
|
|
3178
3277
|
}
|
|
3179
3278
|
requestRedeemption(passbookId) {
|
|
3180
3279
|
const token = this.getToken();
|
|
3181
3280
|
const headers = new HttpHeaders({
|
|
3182
|
-
|
|
3281
|
+
Authorization: `Bearer ${token}`,
|
|
3183
3282
|
});
|
|
3184
|
-
return this.http.put(this.PASSBOOK_URL +
|
|
3283
|
+
return this.http.put(this.PASSBOOK_URL +
|
|
3284
|
+
`passbook/request/redemption?passBookId=${passbookId}`, {}, { headers: headers });
|
|
3185
3285
|
}
|
|
3186
3286
|
PassbookAppStatus(bId) {
|
|
3187
3287
|
return this.http.get(this.BASE_URL + `app/app/check-app?businessId=${bId}&appName=Passbook`);
|
|
@@ -3190,7 +3290,8 @@ class RestService {
|
|
|
3190
3290
|
return this.http.get(this.BASE_URL + `app/app/check-app?businessId=${bId}&appName=${appName}`);
|
|
3191
3291
|
}
|
|
3192
3292
|
getRedeemPoints(bId, userId, evetType, orderValue, rewardPoints) {
|
|
3193
|
-
return this.http.get(this.BASE_URL +
|
|
3293
|
+
return this.http.get(this.BASE_URL +
|
|
3294
|
+
`ecommerce/api/referrals/available-amount?businessId=${bId}&userId=${userId}&eventType=${evetType}&orderValue=${orderValue}&rewardPoints=${rewardPoints}`);
|
|
3194
3295
|
}
|
|
3195
3296
|
paymentWithCompletePoints(cartId, data) {
|
|
3196
3297
|
return this.http.post(this.BASE_URL + `ecommerce/order/order/rewards?cartId=${cartId}`, data);
|
|
@@ -3198,9 +3299,10 @@ class RestService {
|
|
|
3198
3299
|
getAllPassbookDues(bId, userId) {
|
|
3199
3300
|
const token = this.getToken();
|
|
3200
3301
|
const headers = new HttpHeaders({
|
|
3201
|
-
|
|
3302
|
+
Authorization: `Bearer ${token}`,
|
|
3202
3303
|
});
|
|
3203
|
-
return this.http.get(this.PASSBOOK_URL +
|
|
3304
|
+
return this.http.get(this.PASSBOOK_URL +
|
|
3305
|
+
`passbook/payment/dues?page=0&size=1000&businessId=${bId}&userId=${userId}`, { headers: headers });
|
|
3204
3306
|
}
|
|
3205
3307
|
getToken() {
|
|
3206
3308
|
let token = this.cookieService.get('passBookToken');
|
|
@@ -3209,7 +3311,7 @@ class RestService {
|
|
|
3209
3311
|
getAllTransactions(payload) {
|
|
3210
3312
|
const token = this.getToken();
|
|
3211
3313
|
const headers = new HttpHeaders({
|
|
3212
|
-
|
|
3314
|
+
Authorization: `Bearer ${token}`,
|
|
3213
3315
|
});
|
|
3214
3316
|
return this.http.put(this.PASSBOOK_URL + `dashboard/v3/transactions/page`, payload, { headers: headers });
|
|
3215
3317
|
}
|
|
@@ -3233,7 +3335,10 @@ class RestService {
|
|
|
3233
3335
|
* Response: { data: { isExistingUser: boolean, message: string } }
|
|
3234
3336
|
*/
|
|
3235
3337
|
sendOtpV2(identifier, businessId) {
|
|
3236
|
-
return this.http.put(this.BASE_URL + `ecommerce/user/auth/send-otp`, {
|
|
3338
|
+
return this.http.put(this.BASE_URL + `ecommerce/user/auth/send-otp`, {
|
|
3339
|
+
identifier,
|
|
3340
|
+
businessId,
|
|
3341
|
+
});
|
|
3237
3342
|
}
|
|
3238
3343
|
verifyOtpV2(payload) {
|
|
3239
3344
|
return this.http.put(this.BASE_URL + `ecommerce/user/auth/verify-otp`, payload);
|
|
@@ -3245,12 +3350,16 @@ class RestService {
|
|
|
3245
3350
|
return this.http.put(this.BASE_URL + `ecommerce/user/auth/login-password`, payload);
|
|
3246
3351
|
}
|
|
3247
3352
|
flush(eventsToSend) {
|
|
3248
|
-
this.http
|
|
3353
|
+
this.http
|
|
3354
|
+
.post(this.BASE_URL + 'ecommerce/analytics/batch', eventsToSend)
|
|
3249
3355
|
.subscribe({ error: () => { } });
|
|
3250
3356
|
}
|
|
3251
3357
|
getPopularSearches() {
|
|
3252
|
-
const businessId = this.storage.getItem(
|
|
3253
|
-
|
|
3358
|
+
const businessId = this.storage.getItem('bId') ??
|
|
3359
|
+
this.storage.getItem('businessId') ??
|
|
3360
|
+
'1f121081-dbea-65c6-ad89-1dfe8cdda902';
|
|
3361
|
+
return this.http.get(this.BASE_URL +
|
|
3362
|
+
`ecommerce/inventory/popular-searches?businessId=${businessId}`);
|
|
3254
3363
|
}
|
|
3255
3364
|
getMenuItems(menuId) {
|
|
3256
3365
|
return this.http.get(this.BASE_URL + `ecommerce/menu/${menuId}`);
|
|
@@ -12983,10 +13092,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
12983
13092
|
}] } });
|
|
12984
13093
|
|
|
12985
13094
|
class BlogListComponent extends BaseSection {
|
|
12986
|
-
constructor(_eventService) {
|
|
13095
|
+
constructor(_eventService, restService, storage) {
|
|
12987
13096
|
super();
|
|
12988
13097
|
this._eventService = _eventService;
|
|
13098
|
+
this.restService = restService;
|
|
13099
|
+
this.storage = storage;
|
|
12989
13100
|
this.responseData = [];
|
|
13101
|
+
this.categoryList = [];
|
|
13102
|
+
// undefined = nothing clicked yet (no tab highlighted); null = "All" explicitly clicked.
|
|
13103
|
+
this.selectedCategoryId = undefined;
|
|
13104
|
+
this.filteredBlogs = null;
|
|
13105
|
+
this.apiLoading = false;
|
|
12990
13106
|
}
|
|
12991
13107
|
ngOnInit() {
|
|
12992
13108
|
for (let blog of this.responseData) {
|
|
@@ -12998,6 +13114,53 @@ class BlogListComponent extends BaseSection {
|
|
|
12998
13114
|
}
|
|
12999
13115
|
this.style = this.data?.styles;
|
|
13000
13116
|
this.blogContent = this.data?.content;
|
|
13117
|
+
this.loadBlogCategories();
|
|
13118
|
+
}
|
|
13119
|
+
get businessId() {
|
|
13120
|
+
return (this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? null);
|
|
13121
|
+
}
|
|
13122
|
+
get displayedBlogs() {
|
|
13123
|
+
return this.filteredBlogs ?? this.responseData;
|
|
13124
|
+
}
|
|
13125
|
+
loadBlogCategories() {
|
|
13126
|
+
const bId = this.businessId;
|
|
13127
|
+
if (!bId)
|
|
13128
|
+
return;
|
|
13129
|
+
this.restService.getBlogCategories(bId).subscribe({
|
|
13130
|
+
next: categories => {
|
|
13131
|
+
this.categoryList = categories ?? [];
|
|
13132
|
+
},
|
|
13133
|
+
error: () => {
|
|
13134
|
+
this.categoryList = [];
|
|
13135
|
+
},
|
|
13136
|
+
});
|
|
13137
|
+
}
|
|
13138
|
+
selectCategory(categoryId) {
|
|
13139
|
+
this.selectedCategoryId = categoryId;
|
|
13140
|
+
if (categoryId === null) {
|
|
13141
|
+
this.filteredBlogs = null;
|
|
13142
|
+
return;
|
|
13143
|
+
}
|
|
13144
|
+
const bId = this.businessId;
|
|
13145
|
+
if (!bId)
|
|
13146
|
+
return;
|
|
13147
|
+
this.apiLoading = true;
|
|
13148
|
+
this.restService.getBlogsByCategory(bId, categoryId).subscribe({
|
|
13149
|
+
next: (response) => {
|
|
13150
|
+
const list = response?.data ?? [];
|
|
13151
|
+
for (const blog of list) {
|
|
13152
|
+
blog['img'] = blog.blocks?.find((x) => x.type === 'image')?.data?.file?.url;
|
|
13153
|
+
if (blog?.keyWords?.content?.length > 0)
|
|
13154
|
+
blog['tags'] = blog?.keyWords?.content?.split(',') || [];
|
|
13155
|
+
}
|
|
13156
|
+
this.filteredBlogs = list;
|
|
13157
|
+
this.apiLoading = false;
|
|
13158
|
+
},
|
|
13159
|
+
error: () => {
|
|
13160
|
+
this.filteredBlogs = [];
|
|
13161
|
+
this.apiLoading = false;
|
|
13162
|
+
},
|
|
13163
|
+
});
|
|
13001
13164
|
}
|
|
13002
13165
|
get headingSpace() {
|
|
13003
13166
|
return this.style?.layout?.headingSpacing;
|
|
@@ -13016,12 +13179,13 @@ class BlogListComponent extends BaseSection {
|
|
|
13016
13179
|
this._eventService.editSection.emit({ data: this.data });
|
|
13017
13180
|
}, 100);
|
|
13018
13181
|
}
|
|
13019
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13020
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" class=\"total-container\" simpoHover\n (hovering)=\"showEditTabs($event)\" *ngIf=\"(responseData?.length || 0) > 0;else elseBlock\" [attr.style]=\"customClass\">\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\" [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row gap-20\">\n <div [simpoColumnDirective]=\"data?.styles?.size\" [id]=\"data?.id\" *ngFor=\"let content of responseData\"\n class=\"d-flex\">\n <a [routerLink]=\"['/blog', content.newPostTitle]\" (click)=\"getBlogById(content.articleSlug)\">\n <div class=\"cards h-100\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\">\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\" alt=\"\" *ngIf=\"content.img\" loading=\"lazy\">\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\" *ngIf=\"!content.img\" loading=\"lazy\">\n <div class=\"p-30\">\n <!-- <div class=\"d-flex flex-wrap align-items-center gap-2\">\n <ng-container *ngFor=\"let tag of content?.tags | slice:0:4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div> -->\n <div class=\"heading-medium title mt-2 fs-20\" *ngIf=\"blogContent?.display?.showHeading\">\n {{content.postTitle.length > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div class=\"body-large mt-4 pb-15\" *ngIf=\"blogContent?.display?.showContent\">\n {{ content.postSummary.length > 250 ? content.postSummary.substring(0, 250) + '...' :\n content.postSummary }}\n </div>\n </ng-container>\n\n <div class=\"d-flex justify-content-end p-2 align-items-center\" *ngIf=\"content?.author?.content && content?.author?.content.length > 0\">\n <p>- {{content?.author?.content | titlecase}}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> <span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
13182
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: EventsService }, { token: RestService }, { token: LOCAL_STORAGE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13183
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> <span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CardSkeletonLoaderComponent, selector: "simpo-card-skeleton-loader", inputs: ["count", "showTitles"] }] }); }
|
|
13021
13184
|
}
|
|
13022
13185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, decorators: [{
|
|
13023
13186
|
type: Component,
|
|
13024
|
-
args: [{ selector: 'simpo-blog-list', standalone: true, imports: [
|
|
13187
|
+
args: [{ selector: 'simpo-blog-list', standalone: true, imports: [
|
|
13188
|
+
CommonModule,
|
|
13025
13189
|
AnimationDirective,
|
|
13026
13190
|
BorderDirective,
|
|
13027
13191
|
ContentFitDirective,
|
|
@@ -13033,9 +13197,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
13033
13197
|
ContentTitleDirective,
|
|
13034
13198
|
HoverDirective,
|
|
13035
13199
|
HoverElementsComponent,
|
|
13036
|
-
MatIcon,
|
|
13037
|
-
|
|
13038
|
-
|
|
13200
|
+
MatIcon,
|
|
13201
|
+
SvgDividerComponent,
|
|
13202
|
+
SpacingHorizontalDirective,
|
|
13203
|
+
RouterLink,
|
|
13204
|
+
CardSkeletonLoaderComponent,
|
|
13205
|
+
], template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> <span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"] }]
|
|
13206
|
+
}], ctorParameters: () => [{ type: EventsService }, { type: RestService }, { type: undefined, decorators: [{
|
|
13207
|
+
type: Inject,
|
|
13208
|
+
args: [LOCAL_STORAGE]
|
|
13209
|
+
}] }], propDecorators: { responseData: [{
|
|
13039
13210
|
type: Input
|
|
13040
13211
|
}], index: [{
|
|
13041
13212
|
type: Input
|
|
@@ -13050,944 +13221,1300 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
13050
13221
|
}] } });
|
|
13051
13222
|
|
|
13052
13223
|
class ViewBlogComponent {
|
|
13053
|
-
constructor(_eventService) {
|
|
13224
|
+
constructor(_eventService, _elementRef, platformId) {
|
|
13054
13225
|
this._eventService = _eventService;
|
|
13226
|
+
this._elementRef = _elementRef;
|
|
13055
13227
|
this.responseData = {
|
|
13056
|
-
|
|
13057
|
-
|
|
13058
|
-
|
|
13059
|
-
|
|
13060
|
-
|
|
13061
|
-
|
|
13062
|
-
|
|
13063
|
-
|
|
13064
|
-
|
|
13228
|
+
subIndustryId: null,
|
|
13229
|
+
subIndustryName: '',
|
|
13230
|
+
displayId: 'BG1778',
|
|
13231
|
+
articleSlug: 'How-to-Increase-Repeat-Customers-in-a-Jewellery-Store',
|
|
13232
|
+
updatedTimeStamp: '2026-07-22T12:10:20.000+00:00',
|
|
13233
|
+
readTime: '6',
|
|
13234
|
+
wordCount: 1256,
|
|
13235
|
+
totalVisits: 0,
|
|
13236
|
+
id: '1f185c62-898d-67c7-a377-c3e9c2e4f536',
|
|
13237
|
+
businessId: '1ef944db-0e37-6f01-943a-214dd19f54e9',
|
|
13238
|
+
time: 0,
|
|
13239
|
+
version: '',
|
|
13240
|
+
blocks: [
|
|
13065
13241
|
{
|
|
13066
|
-
|
|
13067
|
-
|
|
13068
|
-
|
|
13069
|
-
|
|
13070
|
-
|
|
13242
|
+
id: 'JyDKAbiu81',
|
|
13243
|
+
type: 'header',
|
|
13244
|
+
data: {
|
|
13245
|
+
text: 'How to Increase Repeat Customers in a Jewellery Store: Proven Strategies to Boost Customer Loyalty & Sales',
|
|
13246
|
+
level: 2,
|
|
13247
|
+
},
|
|
13071
13248
|
},
|
|
13072
13249
|
{
|
|
13073
|
-
|
|
13074
|
-
|
|
13075
|
-
|
|
13076
|
-
|
|
13077
|
-
|
|
13250
|
+
id: 'vkcNOX9tLF',
|
|
13251
|
+
type: 'image',
|
|
13252
|
+
data: {
|
|
13253
|
+
caption: '',
|
|
13254
|
+
withBorder: false,
|
|
13255
|
+
withBackground: false,
|
|
13256
|
+
stretched: false,
|
|
13257
|
+
file: {
|
|
13258
|
+
url: 'https://prod-simpo.s3.ap-south-1.amazonaws.com/images/859800c17847214109891.png',
|
|
13259
|
+
height: '500px',
|
|
13260
|
+
},
|
|
13261
|
+
},
|
|
13078
13262
|
},
|
|
13079
13263
|
{
|
|
13080
|
-
|
|
13081
|
-
|
|
13082
|
-
|
|
13083
|
-
|
|
13084
|
-
}
|
|
13264
|
+
id: 'qd0UQID0VJ',
|
|
13265
|
+
type: 'paragraph',
|
|
13266
|
+
data: {
|
|
13267
|
+
text: '<span style="font-size:17pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Imagine This…</span>',
|
|
13268
|
+
},
|
|
13085
13269
|
},
|
|
13086
13270
|
{
|
|
13087
|
-
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
|
|
13091
|
-
}
|
|
13271
|
+
id: 'uPNGAY1cB9',
|
|
13272
|
+
type: 'paragraph',
|
|
13273
|
+
data: {
|
|
13274
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">You spent </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">₹15,000 on Meta Ads</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">, printed thousands of pamphlets for a festive offer, and even ran a local newspaper advertisement.</span>',
|
|
13275
|
+
},
|
|
13092
13276
|
},
|
|
13093
13277
|
{
|
|
13094
|
-
|
|
13095
|
-
|
|
13096
|
-
|
|
13097
|
-
|
|
13098
|
-
}
|
|
13278
|
+
id: 'bDzXtwyHH9',
|
|
13279
|
+
type: 'paragraph',
|
|
13280
|
+
data: {
|
|
13281
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Customers walked into your jewellery showroom. Sales were good during Akshaya Tritiya, Diwali, and the wedding season.</span>',
|
|
13282
|
+
},
|
|
13099
13283
|
},
|
|
13100
13284
|
{
|
|
13101
|
-
|
|
13102
|
-
|
|
13103
|
-
|
|
13104
|
-
|
|
13105
|
-
|
|
13285
|
+
id: 'dummyTableDemo1',
|
|
13286
|
+
type: 'table',
|
|
13287
|
+
data: {
|
|
13288
|
+
withHeadings: true,
|
|
13289
|
+
content: [
|
|
13290
|
+
['Loyalty Tier', 'Min. Purchase', 'Reward', 'Validity'],
|
|
13291
|
+
['Silver', '₹25,000', '2% cashback', '12 months'],
|
|
13292
|
+
['Gold', '₹75,000', '5% cashback', '12 months'],
|
|
13293
|
+
[
|
|
13294
|
+
'Platinum',
|
|
13295
|
+
'₹1,50,000',
|
|
13296
|
+
'8% cashback + free maintenance',
|
|
13297
|
+
'24 months',
|
|
13298
|
+
],
|
|
13299
|
+
],
|
|
13300
|
+
},
|
|
13106
13301
|
},
|
|
13107
13302
|
{
|
|
13108
|
-
|
|
13109
|
-
|
|
13110
|
-
|
|
13111
|
-
|
|
13112
|
-
|
|
13303
|
+
id: 'dummyTableDemo2',
|
|
13304
|
+
type: 'table',
|
|
13305
|
+
data: {
|
|
13306
|
+
withHeadings: false,
|
|
13307
|
+
content: [
|
|
13308
|
+
['Festive Season', 'Akshaya Tritiya, Diwali, wedding season'],
|
|
13309
|
+
['Avg. Repeat Purchase Gap', '8-10 months'],
|
|
13310
|
+
['Preferred Contact Channel', 'WhatsApp'],
|
|
13311
|
+
['Top Reason For Return Visit', 'Referral rewards'],
|
|
13312
|
+
],
|
|
13313
|
+
},
|
|
13113
13314
|
},
|
|
13114
13315
|
{
|
|
13115
|
-
|
|
13116
|
-
|
|
13117
|
-
|
|
13118
|
-
|
|
13119
|
-
|
|
13316
|
+
id: 'dummyTableDemo3',
|
|
13317
|
+
type: 'table',
|
|
13318
|
+
data: {
|
|
13319
|
+
withHeadings: true,
|
|
13320
|
+
content: [
|
|
13321
|
+
[
|
|
13322
|
+
'Month',
|
|
13323
|
+
'New Customers',
|
|
13324
|
+
'Repeat Customers',
|
|
13325
|
+
'WhatsApp Reminders Sent',
|
|
13326
|
+
'Redemptions',
|
|
13327
|
+
'Revenue from Repeats',
|
|
13328
|
+
],
|
|
13329
|
+
['April', '120', '45', '300', '60', '₹4,20,000'],
|
|
13330
|
+
['May', '98', '62', '340', '78', '₹5,10,000'],
|
|
13331
|
+
['June', '145', '80', '410', '95', '₹6,35,000'],
|
|
13332
|
+
],
|
|
13333
|
+
},
|
|
13120
13334
|
},
|
|
13121
13335
|
{
|
|
13122
|
-
|
|
13123
|
-
|
|
13124
|
-
|
|
13125
|
-
|
|
13126
|
-
}
|
|
13336
|
+
id: 'fadoWe1GBc',
|
|
13337
|
+
type: 'paragraph',
|
|
13338
|
+
data: {
|
|
13339
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">But after six months, something unexpected happened.</span>',
|
|
13340
|
+
},
|
|
13127
13341
|
},
|
|
13128
13342
|
{
|
|
13129
|
-
|
|
13130
|
-
|
|
13131
|
-
|
|
13132
|
-
|
|
13133
|
-
}
|
|
13343
|
+
id: 'L367jCincd',
|
|
13344
|
+
type: 'paragraph',
|
|
13345
|
+
data: {
|
|
13346
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The same customers who once praised your service bought their next jewellery purchase from another store.</span>',
|
|
13347
|
+
},
|
|
13134
13348
|
},
|
|
13135
13349
|
{
|
|
13136
|
-
|
|
13137
|
-
|
|
13138
|
-
|
|
13139
|
-
|
|
13140
|
-
}
|
|
13350
|
+
id: 'dkLsmSu2lY',
|
|
13351
|
+
type: 'paragraph',
|
|
13352
|
+
data: {
|
|
13353
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Not because your jewellery was expensive.</span>',
|
|
13354
|
+
},
|
|
13141
13355
|
},
|
|
13142
13356
|
{
|
|
13143
|
-
|
|
13144
|
-
|
|
13145
|
-
|
|
13146
|
-
|
|
13147
|
-
}
|
|
13357
|
+
id: 'DAdq8GtPbR',
|
|
13358
|
+
type: 'paragraph',
|
|
13359
|
+
data: {
|
|
13360
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Not because your designs were outdated.</span>',
|
|
13361
|
+
},
|
|
13148
13362
|
},
|
|
13149
13363
|
{
|
|
13150
|
-
|
|
13151
|
-
|
|
13152
|
-
|
|
13153
|
-
|
|
13154
|
-
}
|
|
13364
|
+
id: '9pqofrbOW0',
|
|
13365
|
+
type: 'paragraph',
|
|
13366
|
+
data: {
|
|
13367
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">But because </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">they simply forgot about your business.</span>',
|
|
13368
|
+
},
|
|
13155
13369
|
},
|
|
13156
13370
|
{
|
|
13157
|
-
|
|
13158
|
-
|
|
13159
|
-
|
|
13160
|
-
|
|
13161
|
-
}
|
|
13371
|
+
id: 'IE9A-uBWBg',
|
|
13372
|
+
type: 'paragraph',
|
|
13373
|
+
data: {
|
|
13374
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This is one of the biggest challenges jewellery retailers face today.</span>',
|
|
13375
|
+
},
|
|
13162
13376
|
},
|
|
13163
13377
|
{
|
|
13164
|
-
|
|
13165
|
-
|
|
13166
|
-
|
|
13167
|
-
|
|
13168
|
-
}
|
|
13378
|
+
id: 'MF3K4P54FE',
|
|
13379
|
+
type: 'paragraph',
|
|
13380
|
+
data: {
|
|
13381
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Most jewellery owners spend thousands of rupees attracting new customers while unintentionally neglecting the customers who have already trusted them.</span>',
|
|
13382
|
+
},
|
|
13169
13383
|
},
|
|
13170
13384
|
{
|
|
13171
|
-
|
|
13172
|
-
|
|
13173
|
-
|
|
13174
|
-
|
|
13175
|
-
}
|
|
13385
|
+
id: 's_Na0psxmH',
|
|
13386
|
+
type: 'paragraph',
|
|
13387
|
+
data: {
|
|
13388
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The result?</span>',
|
|
13389
|
+
},
|
|
13176
13390
|
},
|
|
13177
13391
|
{
|
|
13178
|
-
|
|
13179
|
-
|
|
13180
|
-
|
|
13181
|
-
|
|
13182
|
-
|
|
13392
|
+
id: 'FeKyQmpgXr',
|
|
13393
|
+
type: 'list',
|
|
13394
|
+
data: {
|
|
13395
|
+
style: 'unordered',
|
|
13396
|
+
items: [
|
|
13397
|
+
'Customers purchase once and never return.',
|
|
13398
|
+
'Gold scheme members stop paying monthly instalments.',
|
|
13399
|
+
'Staff spend hours making reminder calls.',
|
|
13400
|
+
'Customer records remain in paper files or Excel sheets.',
|
|
13401
|
+
'Festival campaigns reach only a fraction of past buyers.',
|
|
13402
|
+
'Competitors reconnect with your customers before you do.',
|
|
13403
|
+
],
|
|
13404
|
+
},
|
|
13183
13405
|
},
|
|
13184
13406
|
{
|
|
13185
|
-
|
|
13186
|
-
|
|
13187
|
-
|
|
13188
|
-
|
|
13189
|
-
}
|
|
13407
|
+
id: 'zVORjT8DOu',
|
|
13408
|
+
type: 'paragraph',
|
|
13409
|
+
data: {
|
|
13410
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">If this sounds familiar, you\'re not alone.</span>',
|
|
13411
|
+
},
|
|
13190
13412
|
},
|
|
13191
13413
|
{
|
|
13192
|
-
|
|
13193
|
-
|
|
13194
|
-
|
|
13195
|
-
|
|
13196
|
-
}
|
|
13414
|
+
id: 'oHBeq3cDjH',
|
|
13415
|
+
type: 'paragraph',
|
|
13416
|
+
data: {
|
|
13417
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The good news is that increasing repeat customers doesn\'t always require a bigger marketing budget.</span>',
|
|
13418
|
+
},
|
|
13197
13419
|
},
|
|
13198
13420
|
{
|
|
13199
|
-
|
|
13200
|
-
|
|
13201
|
-
|
|
13202
|
-
|
|
13203
|
-
}
|
|
13421
|
+
id: 'xbhYCptZpM',
|
|
13422
|
+
type: 'paragraph',
|
|
13423
|
+
data: {
|
|
13424
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Often, it requires a better customer retention strategy.</span>',
|
|
13425
|
+
},
|
|
13204
13426
|
},
|
|
13205
13427
|
{
|
|
13206
|
-
|
|
13207
|
-
|
|
13208
|
-
|
|
13209
|
-
|
|
13210
|
-
}
|
|
13428
|
+
id: '8jTf7G2zLd',
|
|
13429
|
+
type: 'paragraph',
|
|
13430
|
+
data: {
|
|
13431
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">In this guide, we\'ll explore practical strategies that leading jewellery retailers use to increase customer loyalty, improve gold scheme collections, and build a business where customers keep coming back year after year.</span>',
|
|
13432
|
+
},
|
|
13211
13433
|
},
|
|
13212
13434
|
{
|
|
13213
|
-
|
|
13214
|
-
|
|
13215
|
-
|
|
13216
|
-
|
|
13217
|
-
|
|
13435
|
+
id: 'uNUXVV2HAF',
|
|
13436
|
+
type: 'header',
|
|
13437
|
+
data: {
|
|
13438
|
+
text: 'Why Repeat Customers Matter More Than New Customers',
|
|
13439
|
+
level: 1,
|
|
13440
|
+
},
|
|
13218
13441
|
},
|
|
13219
13442
|
{
|
|
13220
|
-
|
|
13221
|
-
|
|
13222
|
-
|
|
13223
|
-
|
|
13224
|
-
}
|
|
13443
|
+
id: 'AraiFCgo1I',
|
|
13444
|
+
type: 'paragraph',
|
|
13445
|
+
data: {
|
|
13446
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Every jewellery retailer dreams of attracting new customers.</span>',
|
|
13447
|
+
},
|
|
13225
13448
|
},
|
|
13226
13449
|
{
|
|
13227
|
-
|
|
13228
|
-
|
|
13229
|
-
|
|
13230
|
-
|
|
13231
|
-
}
|
|
13450
|
+
id: '11DHzXNNRT',
|
|
13451
|
+
type: 'paragraph',
|
|
13452
|
+
data: {
|
|
13453
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">But the most profitable stores know a simple truth:</span>',
|
|
13454
|
+
},
|
|
13232
13455
|
},
|
|
13233
13456
|
{
|
|
13234
|
-
|
|
13235
|
-
|
|
13236
|
-
|
|
13237
|
-
|
|
13238
|
-
}
|
|
13457
|
+
id: 'W0A0GxNHS7',
|
|
13458
|
+
type: 'paragraph',
|
|
13459
|
+
data: {
|
|
13460
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The easiest customer to sell to is someone who has already bought from you.</span>',
|
|
13461
|
+
},
|
|
13239
13462
|
},
|
|
13240
13463
|
{
|
|
13241
|
-
|
|
13242
|
-
|
|
13243
|
-
|
|
13244
|
-
|
|
13245
|
-
}
|
|
13464
|
+
id: 'KajmNOsrms',
|
|
13465
|
+
type: 'paragraph',
|
|
13466
|
+
data: {
|
|
13467
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Think about a typical jewellery customer.</span>',
|
|
13468
|
+
},
|
|
13246
13469
|
},
|
|
13247
13470
|
{
|
|
13248
|
-
|
|
13249
|
-
|
|
13250
|
-
|
|
13251
|
-
|
|
13252
|
-
}
|
|
13471
|
+
id: 'XIPJk8oGd5',
|
|
13472
|
+
type: 'paragraph',
|
|
13473
|
+
data: {
|
|
13474
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A person buying an engagement ring today might later purchase:</span>',
|
|
13475
|
+
},
|
|
13253
13476
|
},
|
|
13254
13477
|
{
|
|
13255
|
-
|
|
13256
|
-
|
|
13257
|
-
|
|
13258
|
-
|
|
13259
|
-
|
|
13478
|
+
id: '6udc4_lhcx',
|
|
13479
|
+
type: 'list',
|
|
13480
|
+
data: {
|
|
13481
|
+
style: 'unordered',
|
|
13482
|
+
items: [
|
|
13483
|
+
'Wedding jewellery',
|
|
13484
|
+
'Anniversary gifts',
|
|
13485
|
+
'Baby shower jewellery',
|
|
13486
|
+
'Festival collections',
|
|
13487
|
+
'Gold coins',
|
|
13488
|
+
'Monthly gold savings schemes',
|
|
13489
|
+
],
|
|
13490
|
+
},
|
|
13260
13491
|
},
|
|
13261
13492
|
{
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
|
|
13265
|
-
|
|
13266
|
-
}
|
|
13493
|
+
id: '5KjzrI2UnH',
|
|
13494
|
+
type: 'paragraph',
|
|
13495
|
+
data: {
|
|
13496
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Over a lifetime, one customer can generate multiple purchases.</span>',
|
|
13497
|
+
},
|
|
13267
13498
|
},
|
|
13268
13499
|
{
|
|
13269
|
-
|
|
13270
|
-
|
|
13271
|
-
|
|
13272
|
-
|
|
13273
|
-
}
|
|
13500
|
+
id: '3XzZwU5W7z',
|
|
13501
|
+
type: 'paragraph',
|
|
13502
|
+
data: {
|
|
13503
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The challenge is staying connected between those occasions.</span>',
|
|
13504
|
+
},
|
|
13274
13505
|
},
|
|
13275
13506
|
{
|
|
13276
|
-
|
|
13277
|
-
|
|
13278
|
-
|
|
13279
|
-
|
|
13280
|
-
}
|
|
13507
|
+
id: 'AdmnsV9cTl',
|
|
13508
|
+
type: 'paragraph',
|
|
13509
|
+
data: {
|
|
13510
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Unfortunately, many jewellery stores lose touch after the first sale.</span>',
|
|
13511
|
+
},
|
|
13281
13512
|
},
|
|
13282
13513
|
{
|
|
13283
|
-
|
|
13284
|
-
|
|
13285
|
-
|
|
13286
|
-
|
|
13287
|
-
}
|
|
13514
|
+
id: 'PEDGnjTgfV',
|
|
13515
|
+
type: 'paragraph',
|
|
13516
|
+
data: {
|
|
13517
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No follow-up.</span>',
|
|
13518
|
+
},
|
|
13288
13519
|
},
|
|
13289
13520
|
{
|
|
13290
|
-
|
|
13291
|
-
|
|
13292
|
-
|
|
13293
|
-
|
|
13294
|
-
}
|
|
13521
|
+
id: 'E1n0EGLScQ',
|
|
13522
|
+
type: 'paragraph',
|
|
13523
|
+
data: {
|
|
13524
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No reminders.</span>',
|
|
13525
|
+
},
|
|
13295
13526
|
},
|
|
13296
13527
|
{
|
|
13297
|
-
|
|
13298
|
-
|
|
13299
|
-
|
|
13300
|
-
"style"
|
|
13301
|
-
|
|
13302
|
-
"Both Codecademy and freeCodeCamp provide beginner courses."
|
|
13303
|
-
]
|
|
13304
|
-
}
|
|
13528
|
+
id: '9mqQlu_m94',
|
|
13529
|
+
type: 'paragraph',
|
|
13530
|
+
data: {
|
|
13531
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No personalized communication.</span>',
|
|
13532
|
+
},
|
|
13305
13533
|
},
|
|
13306
13534
|
{
|
|
13307
|
-
|
|
13308
|
-
|
|
13309
|
-
|
|
13310
|
-
|
|
13311
|
-
}
|
|
13535
|
+
id: 'faQUMozk8E',
|
|
13536
|
+
type: 'paragraph',
|
|
13537
|
+
data: {
|
|
13538
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No loyalty program.</span>',
|
|
13539
|
+
},
|
|
13312
13540
|
},
|
|
13313
13541
|
{
|
|
13314
|
-
|
|
13315
|
-
|
|
13316
|
-
|
|
13317
|
-
|
|
13318
|
-
}
|
|
13542
|
+
id: '95FLH2Z5fH',
|
|
13543
|
+
type: 'paragraph',
|
|
13544
|
+
data: {
|
|
13545
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Eventually, the customer walks into another jewellery store—not because they\'re unhappy, but because the competitor stayed visible.</span>',
|
|
13546
|
+
},
|
|
13319
13547
|
},
|
|
13320
13548
|
{
|
|
13321
|
-
|
|
13322
|
-
|
|
13323
|
-
|
|
13324
|
-
|
|
13325
|
-
|
|
13549
|
+
id: 'qHDfLo4bPA',
|
|
13550
|
+
type: 'header',
|
|
13551
|
+
data: {
|
|
13552
|
+
text: 'The Biggest Customer Retention Problems Jewellery Stores Face',
|
|
13553
|
+
level: 1,
|
|
13554
|
+
},
|
|
13326
13555
|
},
|
|
13327
13556
|
{
|
|
13328
|
-
|
|
13329
|
-
|
|
13330
|
-
|
|
13331
|
-
|
|
13332
|
-
}
|
|
13557
|
+
id: '5VDm7sUJte',
|
|
13558
|
+
type: 'paragraph',
|
|
13559
|
+
data: {
|
|
13560
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">After speaking with jewellery retailers across India, the same challenges appear repeatedly.</span>',
|
|
13561
|
+
},
|
|
13333
13562
|
},
|
|
13334
13563
|
{
|
|
13335
|
-
|
|
13336
|
-
|
|
13337
|
-
|
|
13338
|
-
|
|
13339
|
-
|
|
13564
|
+
id: 'ee1avurVhp',
|
|
13565
|
+
type: 'header',
|
|
13566
|
+
data: {
|
|
13567
|
+
text: '1. Customers Forget About the Store',
|
|
13568
|
+
level: 3,
|
|
13569
|
+
},
|
|
13340
13570
|
},
|
|
13341
13571
|
{
|
|
13342
|
-
|
|
13343
|
-
|
|
13344
|
-
|
|
13345
|
-
|
|
13346
|
-
}
|
|
13572
|
+
id: 'MXpJGVcIu1',
|
|
13573
|
+
type: 'paragraph',
|
|
13574
|
+
data: {
|
|
13575
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Most customers buy jewellery only a few times a year.</span>',
|
|
13576
|
+
},
|
|
13347
13577
|
},
|
|
13348
13578
|
{
|
|
13349
|
-
|
|
13350
|
-
|
|
13351
|
-
|
|
13352
|
-
|
|
13353
|
-
}
|
|
13579
|
+
id: 'Wd6TbM8kiP',
|
|
13580
|
+
type: 'paragraph',
|
|
13581
|
+
data: {
|
|
13582
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Without regular communication, they forget where they purchased last.</span>',
|
|
13583
|
+
},
|
|
13354
13584
|
},
|
|
13355
13585
|
{
|
|
13356
|
-
|
|
13357
|
-
|
|
13358
|
-
|
|
13359
|
-
|
|
13360
|
-
|
|
13586
|
+
id: 'gVktfSScPB',
|
|
13587
|
+
type: 'header',
|
|
13588
|
+
data: {
|
|
13589
|
+
text: '2. Gold Scheme Customers Miss Installments',
|
|
13590
|
+
level: 3,
|
|
13591
|
+
},
|
|
13361
13592
|
},
|
|
13362
13593
|
{
|
|
13363
|
-
|
|
13364
|
-
|
|
13365
|
-
|
|
13366
|
-
|
|
13367
|
-
}
|
|
13594
|
+
id: 'pfErs56YIa',
|
|
13595
|
+
type: 'paragraph',
|
|
13596
|
+
data: {
|
|
13597
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Monthly gold savings schemes are excellent for customer retention.</span>',
|
|
13598
|
+
},
|
|
13368
13599
|
},
|
|
13369
13600
|
{
|
|
13370
|
-
|
|
13371
|
-
|
|
13372
|
-
|
|
13373
|
-
|
|
13374
|
-
}
|
|
13601
|
+
id: 'sATc0rb9-x',
|
|
13602
|
+
type: 'paragraph',
|
|
13603
|
+
data: {
|
|
13604
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">However, many customers miss instalments simply because they forget the due date.</span>',
|
|
13605
|
+
},
|
|
13375
13606
|
},
|
|
13376
13607
|
{
|
|
13377
|
-
|
|
13378
|
-
|
|
13379
|
-
|
|
13380
|
-
|
|
13381
|
-
}
|
|
13608
|
+
id: 'RWNT1tQ_OV',
|
|
13609
|
+
type: 'paragraph',
|
|
13610
|
+
data: {
|
|
13611
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Staff then spend hours making reminder calls.</span>',
|
|
13612
|
+
},
|
|
13382
13613
|
},
|
|
13383
13614
|
{
|
|
13384
|
-
|
|
13385
|
-
|
|
13386
|
-
|
|
13387
|
-
|
|
13388
|
-
|
|
13615
|
+
id: '-s9MZhQNmg',
|
|
13616
|
+
type: 'header',
|
|
13617
|
+
data: {
|
|
13618
|
+
text: '3. Everything Is Managed Manually',
|
|
13619
|
+
level: 3,
|
|
13620
|
+
},
|
|
13389
13621
|
},
|
|
13390
13622
|
{
|
|
13391
|
-
|
|
13392
|
-
|
|
13393
|
-
|
|
13394
|
-
|
|
13395
|
-
}
|
|
13623
|
+
id: '-DWy8vU25_',
|
|
13624
|
+
type: 'paragraph',
|
|
13625
|
+
data: {
|
|
13626
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many retailers still depend on:</span>',
|
|
13627
|
+
},
|
|
13396
13628
|
},
|
|
13397
13629
|
{
|
|
13398
|
-
|
|
13399
|
-
|
|
13400
|
-
|
|
13401
|
-
|
|
13402
|
-
|
|
13630
|
+
id: 'PQTOI6py5T',
|
|
13631
|
+
type: 'list',
|
|
13632
|
+
data: {
|
|
13633
|
+
style: 'unordered',
|
|
13634
|
+
items: [
|
|
13635
|
+
'Paper passbooks',
|
|
13636
|
+
'Excel sheets',
|
|
13637
|
+
'Registers',
|
|
13638
|
+
'Manual calculations',
|
|
13639
|
+
],
|
|
13640
|
+
},
|
|
13403
13641
|
},
|
|
13404
13642
|
{
|
|
13405
|
-
|
|
13406
|
-
|
|
13407
|
-
|
|
13408
|
-
|
|
13409
|
-
}
|
|
13643
|
+
id: 'B7hdll3Cvd',
|
|
13644
|
+
type: 'paragraph',
|
|
13645
|
+
data: {
|
|
13646
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This increases errors and consumes valuable staff time.</span>',
|
|
13647
|
+
},
|
|
13410
13648
|
},
|
|
13411
13649
|
{
|
|
13412
|
-
|
|
13413
|
-
|
|
13414
|
-
|
|
13415
|
-
|
|
13416
|
-
|
|
13650
|
+
id: '7SINkRpmJZ',
|
|
13651
|
+
type: 'header',
|
|
13652
|
+
data: {
|
|
13653
|
+
text: '4. No Customer Database',
|
|
13654
|
+
level: 3,
|
|
13655
|
+
},
|
|
13417
13656
|
},
|
|
13418
13657
|
{
|
|
13419
|
-
|
|
13420
|
-
|
|
13421
|
-
|
|
13422
|
-
|
|
13423
|
-
}
|
|
13658
|
+
id: '_d4DGhIKDp',
|
|
13659
|
+
type: 'paragraph',
|
|
13660
|
+
data: {
|
|
13661
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many stores have thousands of invoices but no structured customer database.</span>',
|
|
13662
|
+
},
|
|
13424
13663
|
},
|
|
13425
13664
|
{
|
|
13426
|
-
|
|
13427
|
-
|
|
13428
|
-
|
|
13429
|
-
|
|
13430
|
-
}
|
|
13665
|
+
id: 'wI62cQ2pbB',
|
|
13666
|
+
type: 'paragraph',
|
|
13667
|
+
data: {
|
|
13668
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Without customer information, personalized marketing becomes impossible.</span>',
|
|
13669
|
+
},
|
|
13431
13670
|
},
|
|
13432
13671
|
{
|
|
13433
|
-
|
|
13434
|
-
|
|
13435
|
-
|
|
13436
|
-
|
|
13437
|
-
|
|
13672
|
+
id: 'vbQEMA4Ofn',
|
|
13673
|
+
type: 'header',
|
|
13674
|
+
data: {
|
|
13675
|
+
text: '5. No Follow-Up Process',
|
|
13676
|
+
level: 3,
|
|
13677
|
+
},
|
|
13438
13678
|
},
|
|
13439
13679
|
{
|
|
13440
|
-
|
|
13441
|
-
|
|
13442
|
-
|
|
13443
|
-
|
|
13444
|
-
}
|
|
13680
|
+
id: 'M60hLTKwgd',
|
|
13681
|
+
type: 'paragraph',
|
|
13682
|
+
data: {
|
|
13683
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">After the purchase, communication stops.</span>',
|
|
13684
|
+
},
|
|
13445
13685
|
},
|
|
13446
13686
|
{
|
|
13447
|
-
|
|
13448
|
-
|
|
13449
|
-
|
|
13450
|
-
|
|
13451
|
-
}
|
|
13687
|
+
id: '--inklHM2v',
|
|
13688
|
+
type: 'paragraph',
|
|
13689
|
+
data: {
|
|
13690
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No birthday wishes.</span>',
|
|
13691
|
+
},
|
|
13452
13692
|
},
|
|
13453
13693
|
{
|
|
13454
|
-
|
|
13455
|
-
|
|
13456
|
-
|
|
13457
|
-
|
|
13458
|
-
}
|
|
13694
|
+
id: 'ELwVErRFlz',
|
|
13695
|
+
type: 'paragraph',
|
|
13696
|
+
data: {
|
|
13697
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No anniversary messages.</span>',
|
|
13698
|
+
},
|
|
13459
13699
|
},
|
|
13460
13700
|
{
|
|
13461
|
-
|
|
13462
|
-
|
|
13463
|
-
|
|
13464
|
-
|
|
13465
|
-
}
|
|
13701
|
+
id: 'JBQAOZ2gqS',
|
|
13702
|
+
type: 'paragraph',
|
|
13703
|
+
data: {
|
|
13704
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No festive greetings.</span>',
|
|
13705
|
+
},
|
|
13466
13706
|
},
|
|
13467
13707
|
{
|
|
13468
|
-
|
|
13469
|
-
|
|
13470
|
-
|
|
13471
|
-
|
|
13472
|
-
}
|
|
13708
|
+
id: '75hJyzS12C',
|
|
13709
|
+
type: 'paragraph',
|
|
13710
|
+
data: {
|
|
13711
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">No product recommendations.</span>',
|
|
13712
|
+
},
|
|
13473
13713
|
},
|
|
13474
13714
|
{
|
|
13475
|
-
|
|
13476
|
-
|
|
13477
|
-
|
|
13478
|
-
|
|
13479
|
-
}
|
|
13715
|
+
id: 'th4EM_Ev9x',
|
|
13716
|
+
type: 'paragraph',
|
|
13717
|
+
data: {
|
|
13718
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The relationship quietly fades away.</span>',
|
|
13719
|
+
},
|
|
13480
13720
|
},
|
|
13481
13721
|
{
|
|
13482
|
-
|
|
13483
|
-
|
|
13484
|
-
|
|
13485
|
-
|
|
13486
|
-
|
|
13722
|
+
id: '6LcE7ECdcg',
|
|
13723
|
+
type: 'header',
|
|
13724
|
+
data: {
|
|
13725
|
+
text: '15 Proven Strategies to Increase Repeat Customers',
|
|
13726
|
+
level: 1,
|
|
13727
|
+
},
|
|
13487
13728
|
},
|
|
13488
13729
|
{
|
|
13489
|
-
|
|
13490
|
-
|
|
13491
|
-
|
|
13492
|
-
|
|
13493
|
-
|
|
13730
|
+
id: 'Nx632lI-wF',
|
|
13731
|
+
type: 'header',
|
|
13732
|
+
data: {
|
|
13733
|
+
text: '1. Launch a Gold Savings Scheme That Keeps Customers Engaged',
|
|
13734
|
+
level: 2,
|
|
13735
|
+
},
|
|
13494
13736
|
},
|
|
13495
13737
|
{
|
|
13496
|
-
|
|
13497
|
-
|
|
13498
|
-
|
|
13499
|
-
|
|
13500
|
-
}
|
|
13738
|
+
id: 'J_ADpweVfi',
|
|
13739
|
+
type: 'paragraph',
|
|
13740
|
+
data: {
|
|
13741
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">One of the smartest ways to increase repeat business is through a well-managed </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Gold Saving Scheme</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">.</span>',
|
|
13742
|
+
},
|
|
13501
13743
|
},
|
|
13502
13744
|
{
|
|
13503
|
-
|
|
13504
|
-
|
|
13505
|
-
|
|
13506
|
-
|
|
13507
|
-
}
|
|
13745
|
+
id: 'S5uj000jqa',
|
|
13746
|
+
type: 'paragraph',
|
|
13747
|
+
data: {
|
|
13748
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead of waiting for customers to return once a year, a gold scheme encourages monthly interaction with your brand.</span>',
|
|
13749
|
+
},
|
|
13508
13750
|
},
|
|
13509
13751
|
{
|
|
13510
|
-
|
|
13511
|
-
|
|
13512
|
-
|
|
13513
|
-
|
|
13514
|
-
}
|
|
13752
|
+
id: 'xBrGqoTLrv',
|
|
13753
|
+
type: 'paragraph',
|
|
13754
|
+
data: {
|
|
13755
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Every monthly payment becomes another touchpoint.</span>',
|
|
13756
|
+
},
|
|
13515
13757
|
},
|
|
13516
13758
|
{
|
|
13517
|
-
|
|
13518
|
-
|
|
13519
|
-
|
|
13520
|
-
|
|
13521
|
-
}
|
|
13759
|
+
id: 'abNB9cO1Zj',
|
|
13760
|
+
type: 'paragraph',
|
|
13761
|
+
data: {
|
|
13762
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Customers stay connected.</span>',
|
|
13763
|
+
},
|
|
13522
13764
|
},
|
|
13523
13765
|
{
|
|
13524
|
-
|
|
13525
|
-
|
|
13526
|
-
|
|
13527
|
-
|
|
13528
|
-
}
|
|
13766
|
+
id: 'GLXBsIgN4m',
|
|
13767
|
+
type: 'paragraph',
|
|
13768
|
+
data: {
|
|
13769
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Trust grows.</span>',
|
|
13770
|
+
},
|
|
13529
13771
|
},
|
|
13530
13772
|
{
|
|
13531
|
-
|
|
13532
|
-
|
|
13533
|
-
|
|
13534
|
-
|
|
13535
|
-
}
|
|
13773
|
+
id: 'e3goTGwKrT',
|
|
13774
|
+
type: 'paragraph',
|
|
13775
|
+
data: {
|
|
13776
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Future purchases become more likely.</span>',
|
|
13777
|
+
},
|
|
13536
13778
|
},
|
|
13537
13779
|
{
|
|
13538
|
-
|
|
13539
|
-
|
|
13540
|
-
|
|
13541
|
-
|
|
13542
|
-
}
|
|
13780
|
+
id: 'yOqzBaTH7B',
|
|
13781
|
+
type: 'paragraph',
|
|
13782
|
+
data: {
|
|
13783
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">However, running a gold scheme manually often creates challenges such as missed instalments, paperwork, and customer confusion.</span>',
|
|
13784
|
+
},
|
|
13543
13785
|
},
|
|
13544
13786
|
{
|
|
13545
|
-
|
|
13546
|
-
|
|
13547
|
-
|
|
13548
|
-
|
|
13549
|
-
}
|
|
13787
|
+
id: '1md_1VRYTX',
|
|
13788
|
+
type: 'paragraph',
|
|
13789
|
+
data: {
|
|
13790
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This is why many retailers are moving to digital gold scheme management.</span>',
|
|
13791
|
+
},
|
|
13550
13792
|
},
|
|
13551
13793
|
{
|
|
13552
|
-
|
|
13553
|
-
|
|
13554
|
-
|
|
13555
|
-
|
|
13556
|
-
|
|
13794
|
+
id: 'JYY8zbXkxh',
|
|
13795
|
+
type: 'header',
|
|
13796
|
+
data: {
|
|
13797
|
+
text: '2. Stop Calling Customers Manually',
|
|
13798
|
+
level: 2,
|
|
13799
|
+
},
|
|
13557
13800
|
},
|
|
13558
13801
|
{
|
|
13559
|
-
|
|
13560
|
-
|
|
13561
|
-
|
|
13562
|
-
|
|
13563
|
-
}
|
|
13802
|
+
id: 'V-dw1da3Vl',
|
|
13803
|
+
type: 'paragraph',
|
|
13804
|
+
data: {
|
|
13805
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Imagine managing 1,200 active gold scheme members.</span>',
|
|
13806
|
+
},
|
|
13564
13807
|
},
|
|
13565
13808
|
{
|
|
13566
|
-
|
|
13567
|
-
|
|
13568
|
-
|
|
13569
|
-
|
|
13570
|
-
}
|
|
13809
|
+
id: 'hUF1vDzoQX',
|
|
13810
|
+
type: 'paragraph',
|
|
13811
|
+
data: {
|
|
13812
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Calling every customer every month is almost impossible.</span>',
|
|
13813
|
+
},
|
|
13571
13814
|
},
|
|
13572
13815
|
{
|
|
13573
|
-
|
|
13574
|
-
|
|
13575
|
-
|
|
13576
|
-
|
|
13577
|
-
}
|
|
13816
|
+
id: 'icwpJONCvF',
|
|
13817
|
+
type: 'paragraph',
|
|
13818
|
+
data: {
|
|
13819
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead, automate:</span>',
|
|
13820
|
+
},
|
|
13578
13821
|
},
|
|
13579
13822
|
{
|
|
13580
|
-
|
|
13581
|
-
|
|
13582
|
-
|
|
13583
|
-
|
|
13584
|
-
|
|
13823
|
+
id: 'T_-ge3rEmM',
|
|
13824
|
+
type: 'list',
|
|
13825
|
+
data: {
|
|
13826
|
+
style: 'unordered',
|
|
13827
|
+
items: [
|
|
13828
|
+
'Payment reminders',
|
|
13829
|
+
'Due date alerts',
|
|
13830
|
+
'Festival greetings',
|
|
13831
|
+
'Gold rate updates',
|
|
13832
|
+
'New collection announcements',
|
|
13833
|
+
],
|
|
13834
|
+
},
|
|
13585
13835
|
},
|
|
13586
13836
|
{
|
|
13587
|
-
|
|
13588
|
-
|
|
13589
|
-
|
|
13590
|
-
|
|
13591
|
-
}
|
|
13837
|
+
id: 'GiVE5WcouE',
|
|
13838
|
+
type: 'paragraph',
|
|
13839
|
+
data: {
|
|
13840
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Automated WhatsApp reminders ensure customers stay informed while allowing your staff to focus on sales rather than repetitive follow-up calls.</span>',
|
|
13841
|
+
},
|
|
13592
13842
|
},
|
|
13593
13843
|
{
|
|
13594
|
-
|
|
13595
|
-
|
|
13596
|
-
|
|
13597
|
-
|
|
13598
|
-
|
|
13844
|
+
id: '19I6Ja1L5B',
|
|
13845
|
+
type: 'header',
|
|
13846
|
+
data: {
|
|
13847
|
+
text: '3. Replace Paper Passbooks with Digital Passbooks',
|
|
13848
|
+
level: 2,
|
|
13849
|
+
},
|
|
13599
13850
|
},
|
|
13600
13851
|
{
|
|
13601
|
-
|
|
13602
|
-
|
|
13603
|
-
|
|
13604
|
-
|
|
13605
|
-
}
|
|
13852
|
+
id: '1MvUvFnBBY',
|
|
13853
|
+
type: 'paragraph',
|
|
13854
|
+
data: {
|
|
13855
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">One of the most common complaints jewellery retailers hear is:</span>',
|
|
13856
|
+
},
|
|
13606
13857
|
},
|
|
13607
13858
|
{
|
|
13608
|
-
|
|
13609
|
-
|
|
13610
|
-
|
|
13611
|
-
|
|
13612
|
-
}
|
|
13859
|
+
id: 'LjZ9E-2MT6',
|
|
13860
|
+
type: 'paragraph',
|
|
13861
|
+
data: {
|
|
13862
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"I\'ve lost my passbook."</span>',
|
|
13863
|
+
},
|
|
13613
13864
|
},
|
|
13614
13865
|
{
|
|
13615
|
-
|
|
13616
|
-
|
|
13617
|
-
|
|
13618
|
-
|
|
13619
|
-
}
|
|
13866
|
+
id: 'wkbiyMWRVq',
|
|
13867
|
+
type: 'paragraph',
|
|
13868
|
+
data: {
|
|
13869
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Now your staff spends valuable time searching through records.</span>',
|
|
13870
|
+
},
|
|
13620
13871
|
},
|
|
13621
13872
|
{
|
|
13622
|
-
|
|
13623
|
-
|
|
13624
|
-
|
|
13625
|
-
|
|
13626
|
-
}
|
|
13873
|
+
id: '0oFKoXyH18',
|
|
13874
|
+
type: 'paragraph',
|
|
13875
|
+
data: {
|
|
13876
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A digital passbook eliminates this problem.</span>',
|
|
13877
|
+
},
|
|
13627
13878
|
},
|
|
13628
13879
|
{
|
|
13629
|
-
|
|
13630
|
-
|
|
13631
|
-
|
|
13632
|
-
|
|
13633
|
-
}
|
|
13880
|
+
id: 'Ka3ilpF4J0',
|
|
13881
|
+
type: 'paragraph',
|
|
13882
|
+
data: {
|
|
13883
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Customers can instantly view:</span>',
|
|
13884
|
+
},
|
|
13634
13885
|
},
|
|
13635
13886
|
{
|
|
13636
|
-
|
|
13637
|
-
|
|
13638
|
-
|
|
13639
|
-
|
|
13640
|
-
|
|
13887
|
+
id: 'Q5qeRog7bp',
|
|
13888
|
+
type: 'list',
|
|
13889
|
+
data: {
|
|
13890
|
+
style: 'unordered',
|
|
13891
|
+
items: [
|
|
13892
|
+
'Instalment history',
|
|
13893
|
+
'Payment status',
|
|
13894
|
+
'Remaining balance',
|
|
13895
|
+
'Scheme progress',
|
|
13896
|
+
],
|
|
13897
|
+
},
|
|
13641
13898
|
},
|
|
13642
13899
|
{
|
|
13643
|
-
|
|
13644
|
-
|
|
13645
|
-
|
|
13646
|
-
|
|
13647
|
-
}
|
|
13900
|
+
id: 'L7nZOmQnSg',
|
|
13901
|
+
type: 'paragraph',
|
|
13902
|
+
data: {
|
|
13903
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">It also builds transparency and confidence.</span>',
|
|
13904
|
+
},
|
|
13648
13905
|
},
|
|
13649
13906
|
{
|
|
13650
|
-
|
|
13651
|
-
|
|
13652
|
-
|
|
13653
|
-
|
|
13654
|
-
|
|
13907
|
+
id: 'y0pj6TvTtZ',
|
|
13908
|
+
type: 'header',
|
|
13909
|
+
data: {
|
|
13910
|
+
text: '4. Build a Customer Database, Not Just a Billing Database',
|
|
13911
|
+
level: 2,
|
|
13912
|
+
},
|
|
13655
13913
|
},
|
|
13656
13914
|
{
|
|
13657
|
-
|
|
13658
|
-
|
|
13659
|
-
|
|
13660
|
-
|
|
13661
|
-
}
|
|
13915
|
+
id: 'jj1Nls6VFv',
|
|
13916
|
+
type: 'paragraph',
|
|
13917
|
+
data: {
|
|
13918
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many retailers have years of invoices but very little usable customer information.</span>',
|
|
13919
|
+
},
|
|
13662
13920
|
},
|
|
13663
13921
|
{
|
|
13664
|
-
|
|
13665
|
-
|
|
13666
|
-
|
|
13667
|
-
|
|
13668
|
-
}
|
|
13922
|
+
id: 'ze4wFv2xpu',
|
|
13923
|
+
type: 'paragraph',
|
|
13924
|
+
data: {
|
|
13925
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A complete customer profile should include:</span>',
|
|
13926
|
+
},
|
|
13669
13927
|
},
|
|
13670
13928
|
{
|
|
13671
|
-
|
|
13672
|
-
|
|
13673
|
-
|
|
13674
|
-
|
|
13675
|
-
|
|
13929
|
+
id: '_HQ-XU8xyU',
|
|
13930
|
+
type: 'list',
|
|
13931
|
+
data: {
|
|
13932
|
+
style: 'unordered',
|
|
13933
|
+
items: [
|
|
13934
|
+
'Birthday',
|
|
13935
|
+
'Anniversary',
|
|
13936
|
+
'Purchase history',
|
|
13937
|
+
'Preferred jewellery category',
|
|
13938
|
+
'Gold scheme status',
|
|
13939
|
+
'Visit history',
|
|
13940
|
+
],
|
|
13941
|
+
},
|
|
13676
13942
|
},
|
|
13677
13943
|
{
|
|
13678
|
-
|
|
13679
|
-
|
|
13680
|
-
|
|
13681
|
-
|
|
13682
|
-
}
|
|
13944
|
+
id: '526IaO8rZg',
|
|
13945
|
+
type: 'paragraph',
|
|
13946
|
+
data: {
|
|
13947
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">This enables personalized communication that feels relevant instead of generic.</span>',
|
|
13948
|
+
},
|
|
13683
13949
|
},
|
|
13684
13950
|
{
|
|
13685
|
-
|
|
13686
|
-
|
|
13687
|
-
|
|
13688
|
-
|
|
13689
|
-
|
|
13951
|
+
id: 'HTc9WUGYbQ',
|
|
13952
|
+
type: 'header',
|
|
13953
|
+
data: {
|
|
13954
|
+
text: '5. Make WhatsApp Your Strongest Marketing Channel',
|
|
13955
|
+
level: 2,
|
|
13956
|
+
},
|
|
13690
13957
|
},
|
|
13691
13958
|
{
|
|
13692
|
-
|
|
13693
|
-
|
|
13694
|
-
|
|
13695
|
-
|
|
13696
|
-
}
|
|
13959
|
+
id: 'd6s5rP32z8',
|
|
13960
|
+
type: 'paragraph',
|
|
13961
|
+
data: {
|
|
13962
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Your customers already use WhatsApp every day.</span>',
|
|
13963
|
+
},
|
|
13697
13964
|
},
|
|
13698
13965
|
{
|
|
13699
|
-
|
|
13700
|
-
|
|
13701
|
-
|
|
13702
|
-
|
|
13703
|
-
}
|
|
13966
|
+
id: 'aZzSRfbV2I',
|
|
13967
|
+
type: 'paragraph',
|
|
13968
|
+
data: {
|
|
13969
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead of relying only on social media, communicate through the platform they check most often.</span>',
|
|
13970
|
+
},
|
|
13704
13971
|
},
|
|
13705
13972
|
{
|
|
13706
|
-
|
|
13707
|
-
|
|
13708
|
-
|
|
13709
|
-
|
|
13710
|
-
}
|
|
13973
|
+
id: 'KeFelhxn4l',
|
|
13974
|
+
type: 'paragraph',
|
|
13975
|
+
data: {
|
|
13976
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Examples include:</span>',
|
|
13977
|
+
},
|
|
13711
13978
|
},
|
|
13712
13979
|
{
|
|
13713
|
-
|
|
13714
|
-
|
|
13715
|
-
|
|
13716
|
-
|
|
13717
|
-
|
|
13980
|
+
id: 'nnLkPLK_Gm',
|
|
13981
|
+
type: 'list',
|
|
13982
|
+
data: {
|
|
13983
|
+
style: 'unordered',
|
|
13984
|
+
items: [
|
|
13985
|
+
'Monthly gold scheme reminders',
|
|
13986
|
+
'Festival wishes',
|
|
13987
|
+
'New arrivals',
|
|
13988
|
+
'Bridal collections',
|
|
13989
|
+
'Gold rate updates',
|
|
13990
|
+
'Exclusive offers',
|
|
13991
|
+
],
|
|
13992
|
+
},
|
|
13718
13993
|
},
|
|
13719
13994
|
{
|
|
13720
|
-
|
|
13721
|
-
|
|
13722
|
-
|
|
13723
|
-
|
|
13724
|
-
}
|
|
13995
|
+
id: 'fogDf4PfgP',
|
|
13996
|
+
type: 'paragraph',
|
|
13997
|
+
data: {
|
|
13998
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Consistent communication keeps your store top of mind.</span>',
|
|
13999
|
+
},
|
|
13725
14000
|
},
|
|
13726
14001
|
{
|
|
13727
|
-
|
|
13728
|
-
|
|
13729
|
-
|
|
13730
|
-
|
|
13731
|
-
|
|
14002
|
+
id: 'Tf04Utqhp4',
|
|
14003
|
+
type: 'header',
|
|
14004
|
+
data: {
|
|
14005
|
+
text: '6. Reward Loyalty, Not Just New Customers',
|
|
14006
|
+
level: 2,
|
|
14007
|
+
},
|
|
13732
14008
|
},
|
|
13733
14009
|
{
|
|
13734
|
-
|
|
13735
|
-
|
|
13736
|
-
|
|
13737
|
-
|
|
13738
|
-
}
|
|
14010
|
+
id: '8x3-lLpWuS',
|
|
14011
|
+
type: 'paragraph',
|
|
14012
|
+
data: {
|
|
14013
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Many jewellery businesses offer discounts only to attract new buyers.</span>',
|
|
14014
|
+
},
|
|
13739
14015
|
},
|
|
13740
14016
|
{
|
|
13741
|
-
|
|
13742
|
-
|
|
13743
|
-
|
|
13744
|
-
|
|
13745
|
-
}
|
|
14017
|
+
id: 'GW-gifTTF8',
|
|
14018
|
+
type: 'paragraph',
|
|
14019
|
+
data: {
|
|
14020
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead, reward customers who continue choosing your brand.</span>',
|
|
14021
|
+
},
|
|
13746
14022
|
},
|
|
13747
14023
|
{
|
|
13748
|
-
|
|
13749
|
-
|
|
13750
|
-
|
|
13751
|
-
|
|
13752
|
-
}
|
|
14024
|
+
id: '8Jk9fRWsJ3',
|
|
14025
|
+
type: 'paragraph',
|
|
14026
|
+
data: {
|
|
14027
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Ideas include:</span>',
|
|
14028
|
+
},
|
|
13753
14029
|
},
|
|
13754
14030
|
{
|
|
13755
|
-
|
|
13756
|
-
|
|
13757
|
-
|
|
13758
|
-
|
|
13759
|
-
|
|
14031
|
+
id: 'OZIeXOHvnM',
|
|
14032
|
+
type: 'list',
|
|
14033
|
+
data: {
|
|
14034
|
+
style: 'unordered',
|
|
14035
|
+
items: [
|
|
14036
|
+
'Bonus gold after completing a scheme',
|
|
14037
|
+
'Loyalty rewards',
|
|
14038
|
+
'Referral incentives',
|
|
14039
|
+
'Exclusive previews',
|
|
14040
|
+
'Complimentary jewellery cleaning',
|
|
14041
|
+
],
|
|
14042
|
+
},
|
|
13760
14043
|
},
|
|
13761
14044
|
{
|
|
13762
|
-
|
|
13763
|
-
|
|
13764
|
-
|
|
13765
|
-
|
|
13766
|
-
}
|
|
14045
|
+
id: 'wWYtCpA3Wr',
|
|
14046
|
+
type: 'paragraph',
|
|
14047
|
+
data: {
|
|
14048
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">These small gestures encourage long-term relationships.</span>',
|
|
14049
|
+
},
|
|
13767
14050
|
},
|
|
13768
14051
|
{
|
|
13769
|
-
|
|
13770
|
-
|
|
13771
|
-
|
|
13772
|
-
|
|
13773
|
-
|
|
14052
|
+
id: 'ZfPjEsrvKM',
|
|
14053
|
+
type: 'header',
|
|
14054
|
+
data: {
|
|
14055
|
+
text: "7. Recover Customers Before They're Lost",
|
|
14056
|
+
level: 2,
|
|
14057
|
+
},
|
|
13774
14058
|
},
|
|
13775
14059
|
{
|
|
13776
|
-
|
|
13777
|
-
|
|
13778
|
-
|
|
13779
|
-
|
|
13780
|
-
}
|
|
14060
|
+
id: 'CaSeL7KD8q',
|
|
14061
|
+
type: 'paragraph',
|
|
14062
|
+
data: {
|
|
14063
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Not every inactive customer is gone forever.</span>',
|
|
14064
|
+
},
|
|
13781
14065
|
},
|
|
13782
14066
|
{
|
|
13783
|
-
|
|
13784
|
-
|
|
13785
|
-
|
|
13786
|
-
|
|
13787
|
-
}
|
|
14067
|
+
id: '5mzmqjmKwM',
|
|
14068
|
+
type: 'paragraph',
|
|
14069
|
+
data: {
|
|
14070
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Identify customers who haven\'t visited in the last 6–12 months and reconnect them with:</span>',
|
|
14071
|
+
},
|
|
13788
14072
|
},
|
|
13789
14073
|
{
|
|
13790
|
-
|
|
13791
|
-
|
|
13792
|
-
|
|
13793
|
-
|
|
13794
|
-
|
|
14074
|
+
id: 'VeT4U-9auh',
|
|
14075
|
+
type: 'list',
|
|
14076
|
+
data: {
|
|
14077
|
+
style: 'unordered',
|
|
14078
|
+
items: [
|
|
14079
|
+
'Personalized WhatsApp messages',
|
|
14080
|
+
'Festival invitations',
|
|
14081
|
+
'Gold scheme offers',
|
|
14082
|
+
'New collection previews',
|
|
14083
|
+
],
|
|
14084
|
+
},
|
|
13795
14085
|
},
|
|
13796
14086
|
{
|
|
13797
|
-
|
|
13798
|
-
|
|
13799
|
-
|
|
13800
|
-
|
|
13801
|
-
}
|
|
14087
|
+
id: 'ru3MnsQ27U',
|
|
14088
|
+
type: 'paragraph',
|
|
14089
|
+
data: {
|
|
14090
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Winning back an existing customer is usually easier than finding a new one.</span>',
|
|
14091
|
+
},
|
|
13802
14092
|
},
|
|
13803
14093
|
{
|
|
13804
|
-
|
|
13805
|
-
|
|
13806
|
-
|
|
13807
|
-
|
|
13808
|
-
|
|
14094
|
+
id: '7gpH_wPDHs',
|
|
14095
|
+
type: 'header',
|
|
14096
|
+
data: {
|
|
14097
|
+
text: '8. Use Technology to Stay Organized',
|
|
14098
|
+
level: 2,
|
|
14099
|
+
},
|
|
13809
14100
|
},
|
|
13810
14101
|
{
|
|
13811
|
-
|
|
13812
|
-
|
|
13813
|
-
|
|
13814
|
-
|
|
13815
|
-
}
|
|
14102
|
+
id: 'qVQurPoeJ8',
|
|
14103
|
+
type: 'paragraph',
|
|
14104
|
+
data: {
|
|
14105
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">As your customer base grows, spreadsheets and paper registers become difficult to manage.</span>',
|
|
14106
|
+
},
|
|
13816
14107
|
},
|
|
13817
14108
|
{
|
|
13818
|
-
|
|
13819
|
-
|
|
13820
|
-
|
|
13821
|
-
|
|
13822
|
-
}
|
|
14109
|
+
id: 'vbtKHxUnzC',
|
|
14110
|
+
type: 'paragraph',
|
|
14111
|
+
data: {
|
|
14112
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">A digital platform such as </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">PassbookApp</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> helps jewellery retailers:</span>',
|
|
14113
|
+
},
|
|
13823
14114
|
},
|
|
13824
14115
|
{
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
|
|
13828
|
-
|
|
13829
|
-
|
|
14116
|
+
id: 'N5QzSekQgD',
|
|
14117
|
+
type: 'list',
|
|
14118
|
+
data: {
|
|
14119
|
+
style: 'unordered',
|
|
14120
|
+
items: [
|
|
14121
|
+
'Manage gold savings schemes',
|
|
14122
|
+
'Track customer payments',
|
|
14123
|
+
'Send automated WhatsApp reminders',
|
|
14124
|
+
'Maintain digital passbooks',
|
|
14125
|
+
'Build customer profiles',
|
|
14126
|
+
'Monitor collections from one dashboard',
|
|
14127
|
+
],
|
|
14128
|
+
},
|
|
13830
14129
|
},
|
|
13831
14130
|
{
|
|
13832
|
-
|
|
13833
|
-
|
|
13834
|
-
|
|
13835
|
-
"text": "
|
|
13836
|
-
}
|
|
14131
|
+
id: 'XWG64zeXFo',
|
|
14132
|
+
type: 'paragraph',
|
|
14133
|
+
data: {
|
|
14134
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Instead of replacing your personal customer relationships, technology strengthens them by ensuring no customer is forgotten.</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">—--------------------------------------------------------------------------------------------------------------------</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Other strategies </span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Launch a Gold Savings Scheme</span>',
|
|
14135
|
+
},
|
|
13837
14136
|
},
|
|
13838
14137
|
{
|
|
13839
|
-
|
|
13840
|
-
|
|
13841
|
-
|
|
13842
|
-
|
|
13843
|
-
}
|
|
14138
|
+
id: 'kp5J8fAJY1',
|
|
14139
|
+
type: 'paragraph',
|
|
14140
|
+
data: {
|
|
14141
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Automate WhatsApp Payment Reminders</span>',
|
|
14142
|
+
},
|
|
13844
14143
|
},
|
|
13845
14144
|
{
|
|
13846
|
-
|
|
13847
|
-
|
|
13848
|
-
|
|
13849
|
-
|
|
13850
|
-
}
|
|
14145
|
+
id: 'nRtfEBFVVC',
|
|
14146
|
+
type: 'paragraph',
|
|
14147
|
+
data: {
|
|
14148
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Replace Paper Passbooks with Digital Passbooks</span>',
|
|
14149
|
+
},
|
|
13851
14150
|
},
|
|
13852
14151
|
{
|
|
13853
|
-
|
|
13854
|
-
|
|
13855
|
-
|
|
13856
|
-
|
|
13857
|
-
}
|
|
14152
|
+
id: '5vQ5XPtHMS',
|
|
14153
|
+
type: 'paragraph',
|
|
14154
|
+
data: {
|
|
14155
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Build a Customer Database</span>',
|
|
14156
|
+
},
|
|
13858
14157
|
},
|
|
13859
14158
|
{
|
|
13860
|
-
|
|
13861
|
-
|
|
13862
|
-
|
|
13863
|
-
|
|
13864
|
-
}
|
|
14159
|
+
id: '8_hfT_gfRB',
|
|
14160
|
+
type: 'paragraph',
|
|
14161
|
+
data: {
|
|
14162
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Personalize Every Customer Interaction</span>',
|
|
14163
|
+
},
|
|
13865
14164
|
},
|
|
13866
14165
|
{
|
|
13867
|
-
|
|
13868
|
-
|
|
13869
|
-
|
|
13870
|
-
|
|
13871
|
-
}
|
|
14166
|
+
id: 'WFKlteD8Kv',
|
|
14167
|
+
type: 'paragraph',
|
|
14168
|
+
data: {
|
|
14169
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Create a Jewellery Loyalty Program</span>',
|
|
14170
|
+
},
|
|
13872
14171
|
},
|
|
13873
14172
|
{
|
|
13874
|
-
|
|
13875
|
-
|
|
13876
|
-
|
|
13877
|
-
|
|
13878
|
-
}
|
|
14173
|
+
id: 'PVFMJpMwG4',
|
|
14174
|
+
type: 'paragraph',
|
|
14175
|
+
data: {
|
|
14176
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Recover Inactive Customers</span>',
|
|
14177
|
+
},
|
|
13879
14178
|
},
|
|
13880
14179
|
{
|
|
13881
|
-
|
|
13882
|
-
|
|
13883
|
-
|
|
13884
|
-
|
|
13885
|
-
}
|
|
14180
|
+
id: 'MWRSH4ARCb',
|
|
14181
|
+
type: 'paragraph',
|
|
14182
|
+
data: {
|
|
14183
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Automate Customer Follow-ups</span>',
|
|
14184
|
+
},
|
|
13886
14185
|
},
|
|
13887
14186
|
{
|
|
13888
|
-
|
|
13889
|
-
|
|
13890
|
-
|
|
13891
|
-
|
|
13892
|
-
}
|
|
14187
|
+
id: 'sjiKzwCrel',
|
|
14188
|
+
type: 'paragraph',
|
|
14189
|
+
data: {
|
|
14190
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Celebrate Birthdays & Anniversaries</span>',
|
|
14191
|
+
},
|
|
13893
14192
|
},
|
|
13894
14193
|
{
|
|
13895
|
-
|
|
13896
|
-
|
|
13897
|
-
|
|
13898
|
-
|
|
13899
|
-
}
|
|
14194
|
+
id: 'JQpBXE6dlq',
|
|
14195
|
+
type: 'paragraph',
|
|
14196
|
+
data: {
|
|
14197
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Run Festival Marketing Campaigns</span>',
|
|
14198
|
+
},
|
|
13900
14199
|
},
|
|
13901
14200
|
{
|
|
13902
|
-
|
|
13903
|
-
|
|
13904
|
-
|
|
13905
|
-
|
|
13906
|
-
}
|
|
14201
|
+
id: 'jg8ONHkNjf',
|
|
14202
|
+
type: 'paragraph',
|
|
14203
|
+
data: {
|
|
14204
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Offer Referral Rewards</span>',
|
|
14205
|
+
},
|
|
13907
14206
|
},
|
|
13908
14207
|
{
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
|
|
13912
|
-
|
|
13913
|
-
}
|
|
14208
|
+
id: '81ad5L3GEn',
|
|
14209
|
+
type: 'paragraph',
|
|
14210
|
+
data: {
|
|
14211
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Track Customer Purchase History</span>',
|
|
14212
|
+
},
|
|
13914
14213
|
},
|
|
13915
14214
|
{
|
|
13916
|
-
|
|
13917
|
-
|
|
13918
|
-
|
|
13919
|
-
|
|
13920
|
-
}
|
|
14215
|
+
id: 'T82owhXECh',
|
|
14216
|
+
type: 'paragraph',
|
|
14217
|
+
data: {
|
|
14218
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Segment Customers Based on Buying Behaviour</span>',
|
|
14219
|
+
},
|
|
13921
14220
|
},
|
|
13922
14221
|
{
|
|
13923
|
-
|
|
13924
|
-
|
|
13925
|
-
|
|
13926
|
-
|
|
13927
|
-
}
|
|
14222
|
+
id: '3zTjcoV-Ku',
|
|
14223
|
+
type: 'paragraph',
|
|
14224
|
+
data: {
|
|
14225
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Send Gold Rate & New Collection Updates</span>',
|
|
14226
|
+
},
|
|
13928
14227
|
},
|
|
13929
14228
|
{
|
|
13930
|
-
|
|
13931
|
-
|
|
13932
|
-
|
|
13933
|
-
|
|
13934
|
-
}
|
|
14229
|
+
id: 'PmdDZ5Jkir',
|
|
14230
|
+
type: 'paragraph',
|
|
14231
|
+
data: {
|
|
14232
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Improve In-Store Customer Experience</span>',
|
|
14233
|
+
},
|
|
13935
14234
|
},
|
|
13936
14235
|
{
|
|
13937
|
-
|
|
13938
|
-
|
|
13939
|
-
|
|
13940
|
-
|
|
13941
|
-
}
|
|
14236
|
+
id: '139x-wirAi',
|
|
14237
|
+
type: 'paragraph',
|
|
14238
|
+
data: {
|
|
14239
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Use Jewellery CRM Software</span>',
|
|
14240
|
+
},
|
|
13942
14241
|
},
|
|
13943
14242
|
{
|
|
13944
|
-
|
|
13945
|
-
|
|
13946
|
-
|
|
13947
|
-
|
|
13948
|
-
}
|
|
13949
|
-
}
|
|
14243
|
+
id: 'VUJd-tT-Eu',
|
|
14244
|
+
type: 'paragraph',
|
|
14245
|
+
data: {
|
|
14246
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Measure Customer Retention Metrics</span>',
|
|
14247
|
+
},
|
|
14248
|
+
},
|
|
14249
|
+
{
|
|
14250
|
+
id: 'k1Oj2zBVeZ',
|
|
14251
|
+
type: 'paragraph',
|
|
14252
|
+
data: {
|
|
14253
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Collect Customer Feedback & Reviews</span>',
|
|
14254
|
+
},
|
|
14255
|
+
},
|
|
14256
|
+
{
|
|
14257
|
+
id: 'zCXobUMJOb',
|
|
14258
|
+
type: 'paragraph',
|
|
14259
|
+
data: {
|
|
14260
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Analyze Customer Buying Trends</span>',
|
|
14261
|
+
},
|
|
14262
|
+
},
|
|
14263
|
+
{
|
|
14264
|
+
id: 'SaDYv1p6sg',
|
|
14265
|
+
type: 'paragraph',
|
|
14266
|
+
data: {
|
|
14267
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Digitize Your Jewellery Business with PassbookApp</span>',
|
|
14268
|
+
},
|
|
14269
|
+
},
|
|
14270
|
+
{
|
|
14271
|
+
id: 'itszx-eghp',
|
|
14272
|
+
type: 'header',
|
|
14273
|
+
data: {
|
|
14274
|
+
text: 'Final Thoughts',
|
|
14275
|
+
level: 1,
|
|
14276
|
+
},
|
|
14277
|
+
},
|
|
14278
|
+
{
|
|
14279
|
+
id: 'DWZ9Y5DpTi',
|
|
14280
|
+
type: 'paragraph',
|
|
14281
|
+
data: {
|
|
14282
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">The future of jewellery retail belongs to businesses that focus not only on acquiring customers but also on retaining them.</span>',
|
|
14283
|
+
},
|
|
14284
|
+
},
|
|
14285
|
+
{
|
|
14286
|
+
id: 'sh__WfsKsR',
|
|
14287
|
+
type: 'paragraph',
|
|
14288
|
+
data: {
|
|
14289
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Every missed follow-up, forgotten anniversary, or delayed reminder is a missed opportunity to strengthen a customer relationship.</span>',
|
|
14290
|
+
},
|
|
14291
|
+
},
|
|
14292
|
+
{
|
|
14293
|
+
id: '-yIVi7hG1p',
|
|
14294
|
+
type: 'paragraph',
|
|
14295
|
+
data: {
|
|
14296
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">By implementing structured customer retention strategies—such as gold savings schemes, automated reminders, personalized engagement, and digital customer management—you can increase repeat purchases, improve loyalty, and create a more predictable stream of recurring business.</span>',
|
|
14297
|
+
},
|
|
14298
|
+
},
|
|
14299
|
+
{
|
|
14300
|
+
id: 'fqIBVidohQ',
|
|
14301
|
+
type: 'paragraph',
|
|
14302
|
+
data: {
|
|
14303
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">PassbookApp is designed to support this journey by helping jewellery retailers digitize customer management, automate gold scheme operations, and deliver a modern experience that keeps customers coming back.</span>',
|
|
14304
|
+
},
|
|
14305
|
+
},
|
|
14306
|
+
{
|
|
14307
|
+
id: 'ijRpOnUsO4',
|
|
14308
|
+
type: 'header',
|
|
14309
|
+
data: {
|
|
14310
|
+
text: 'Frequently Asked Questions',
|
|
14311
|
+
level: 2,
|
|
14312
|
+
},
|
|
14313
|
+
},
|
|
14314
|
+
{
|
|
14315
|
+
id: 'IBJcODGBFG',
|
|
14316
|
+
type: 'paragraph',
|
|
14317
|
+
data: {
|
|
14318
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">How can a jewellery store increase repeat customers?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Focus on customer retention through gold savings schemes, personalized communication, WhatsApp reminders, loyalty programs, and regular engagement.</span>',
|
|
14319
|
+
},
|
|
14320
|
+
},
|
|
14321
|
+
{
|
|
14322
|
+
id: 'Hw_lhi15c5',
|
|
14323
|
+
type: 'paragraph',
|
|
14324
|
+
data: {
|
|
14325
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Why do customers stop visiting jewellery stores?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> The most common reasons are lack of follow-up, poor engagement, and competitors maintaining stronger communication.</span>',
|
|
14326
|
+
},
|
|
14327
|
+
},
|
|
14328
|
+
{
|
|
14329
|
+
id: 'ADBXyeKS4e',
|
|
14330
|
+
type: 'paragraph',
|
|
14331
|
+
data: {
|
|
14332
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">What is the best software for managing jewellery customers?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> A platform that combines customer records, digital passbooks, gold scheme management, payment tracking, and automated reminders can simplify operations and improve retention.</span>',
|
|
14333
|
+
},
|
|
14334
|
+
},
|
|
14335
|
+
{
|
|
14336
|
+
id: 'E4QcS9ieOL',
|
|
14337
|
+
type: 'paragraph',
|
|
14338
|
+
data: {
|
|
14339
|
+
text: '<span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Do gold savings schemes help customer loyalty?</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"></span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> Yes. They encourage regular monthly interaction, improve retention, and increase the likelihood of future purchases.</span>',
|
|
14340
|
+
},
|
|
14341
|
+
},
|
|
14342
|
+
{
|
|
14343
|
+
id: 'dvXEFf_A4B',
|
|
14344
|
+
type: 'header',
|
|
14345
|
+
data: {
|
|
14346
|
+
text: '<a href="https://www.passbookapp.in/demo">Book a Free Demo</a>',
|
|
14347
|
+
level: 2,
|
|
14348
|
+
},
|
|
14349
|
+
},
|
|
13950
14350
|
],
|
|
13951
|
-
|
|
13952
|
-
|
|
13953
|
-
|
|
13954
|
-
|
|
13955
|
-
|
|
13956
|
-
|
|
13957
|
-
|
|
13958
|
-
|
|
13959
|
-
|
|
13960
|
-
}
|
|
14351
|
+
createdBy: 'Raj',
|
|
14352
|
+
postSummary: 'Discover 15 proven strategies to increase repeat customers in your jewellery store using gold schemes, WhatsApp reminders, customer retention software, and digital customer management.',
|
|
14353
|
+
postTitle: 'How to Increase Repeat Customers in a Jewellery Store',
|
|
14354
|
+
newPostTitle: 'How-to-Increase-Repeat-Customers-in-a-Jewellery-Store',
|
|
14355
|
+
blogMeta: {
|
|
14356
|
+
metaTitle: 'How to Increase Repeat Customers in a Jewellery Store',
|
|
14357
|
+
metaDescription: {
|
|
14358
|
+
name: 'description',
|
|
14359
|
+
content: 'Discover 15 proven strategies to increase repeat customers in your jewellery store using gold schemes, WhatsApp reminders, customer retention software, and digital customer management.',
|
|
14360
|
+
},
|
|
13961
14361
|
},
|
|
13962
|
-
|
|
13963
|
-
|
|
13964
|
-
|
|
13965
|
-
|
|
13966
|
-
|
|
13967
|
-
|
|
13968
|
-
|
|
14362
|
+
createdTimeStamp: '2026-07-22T12:09:09.000+00:00',
|
|
14363
|
+
publishedDate: null,
|
|
14364
|
+
blogScheduledDate: '2026-07-22T00:00:00.000+00:00',
|
|
14365
|
+
blogScheduleTime: '17:40:20',
|
|
14366
|
+
keyWords: {
|
|
14367
|
+
name: 'keywords',
|
|
14368
|
+
content: 'WhatsApp CRM,WhatsApp marketing for jewellers,Jewellery WhatsApp reminders,Jewellery Business Growth',
|
|
13969
14369
|
},
|
|
13970
|
-
|
|
13971
|
-
|
|
13972
|
-
|
|
14370
|
+
author: {
|
|
14371
|
+
name: 'author',
|
|
14372
|
+
content: 'Passbookapp',
|
|
13973
14373
|
},
|
|
13974
|
-
|
|
13975
|
-
|
|
13976
|
-
"blogType": "BUSINESS"
|
|
14374
|
+
blogStatus: 'PUBLISH',
|
|
14375
|
+
blogType: 'BUSINESS',
|
|
13977
14376
|
};
|
|
14377
|
+
this.tocItems = [];
|
|
14378
|
+
this.tocOpen = false;
|
|
14379
|
+
this.activeTocId = null;
|
|
14380
|
+
this.headingBlockIds = new Set();
|
|
14381
|
+
this.isBrowser = isPlatformBrowser(platformId);
|
|
13978
14382
|
}
|
|
13979
14383
|
ngOnInit() {
|
|
14384
|
+
this.buildTableOfContents();
|
|
14385
|
+
}
|
|
14386
|
+
ngOnChanges(changes) {
|
|
14387
|
+
if (changes['responseData'] && !changes['responseData'].isFirstChange()) {
|
|
14388
|
+
this.buildTableOfContents();
|
|
14389
|
+
}
|
|
14390
|
+
}
|
|
14391
|
+
ngAfterViewInit() {
|
|
14392
|
+
this.setupScrollSpy();
|
|
14393
|
+
}
|
|
14394
|
+
ngOnDestroy() {
|
|
14395
|
+
this.tocObserver?.disconnect();
|
|
13980
14396
|
}
|
|
13981
14397
|
editSection() {
|
|
13982
14398
|
// this._eventService.toggleEditorEvent.emit(false);
|
|
13983
14399
|
}
|
|
13984
|
-
|
|
13985
|
-
|
|
14400
|
+
scrollToBlock(event, blockId) {
|
|
14401
|
+
event.preventDefault();
|
|
14402
|
+
if (!this.isBrowser) {
|
|
14403
|
+
return;
|
|
14404
|
+
}
|
|
14405
|
+
this._elementRef.nativeElement
|
|
14406
|
+
.querySelector(`#block-${blockId}`)
|
|
14407
|
+
?.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
14408
|
+
this.tocOpen = false;
|
|
14409
|
+
}
|
|
14410
|
+
buildTableOfContents() {
|
|
14411
|
+
const blocks = this.responseData?.blocks || [];
|
|
14412
|
+
this.headingBlockIds.clear();
|
|
14413
|
+
this.tocItems = blocks
|
|
14414
|
+
.map(block => this.getHeadingCandidate(block))
|
|
14415
|
+
.filter((item) => !!item);
|
|
14416
|
+
this.tocItems.forEach(item => this.headingBlockIds.add(item.id));
|
|
14417
|
+
if (this.isBrowser) {
|
|
14418
|
+
// Re-attach the scroll spy since the anchors it watches just changed.
|
|
14419
|
+
setTimeout(() => this.setupScrollSpy());
|
|
14420
|
+
}
|
|
14421
|
+
}
|
|
14422
|
+
isTocAnchor(blockId) {
|
|
14423
|
+
return this.headingBlockIds.has(blockId);
|
|
14424
|
+
}
|
|
14425
|
+
hasVisibleText(html) {
|
|
14426
|
+
return this.stripHtml(html).length > 0;
|
|
14427
|
+
}
|
|
14428
|
+
getHeadingCandidate(block) {
|
|
14429
|
+
if (!block?.id) {
|
|
14430
|
+
return null;
|
|
14431
|
+
}
|
|
14432
|
+
if (block.type === 'header') {
|
|
14433
|
+
const level = block.data?.['level'] || 2;
|
|
14434
|
+
const text = this.stripHtml(block.data?.['text']);
|
|
14435
|
+
if (level <= 1 || !text) {
|
|
14436
|
+
return null;
|
|
14437
|
+
}
|
|
14438
|
+
return { id: block.id, text };
|
|
14439
|
+
}
|
|
14440
|
+
if (block.type === 'paragraph') {
|
|
14441
|
+
return this.getBoldParagraphHeading(block);
|
|
14442
|
+
}
|
|
14443
|
+
return null;
|
|
14444
|
+
}
|
|
14445
|
+
getBoldParagraphHeading(block) {
|
|
14446
|
+
const html = block.data?.['text'] || '';
|
|
14447
|
+
if (!html.includes('<span')) {
|
|
14448
|
+
return null;
|
|
14449
|
+
}
|
|
14450
|
+
const spanRegex = /<span([^>]*)>([\s\S]*?)<\/span>/g;
|
|
14451
|
+
let match;
|
|
14452
|
+
let boldText = '';
|
|
14453
|
+
let nonBoldText = '';
|
|
14454
|
+
let maxFontSizePt = 0;
|
|
14455
|
+
while ((match = spanRegex.exec(html))) {
|
|
14456
|
+
const style = match[1];
|
|
14457
|
+
const innerText = this.stripHtml(match[2]);
|
|
14458
|
+
const isBold = /font-weight:\s*(bold|[6-9]00)/i.test(style);
|
|
14459
|
+
const sizeMatch = style.match(/font-size:\s*([\d.]+)pt/i);
|
|
14460
|
+
if (sizeMatch) {
|
|
14461
|
+
maxFontSizePt = Math.max(maxFontSizePt, parseFloat(sizeMatch[1]));
|
|
14462
|
+
}
|
|
14463
|
+
if (isBold) {
|
|
14464
|
+
boldText += innerText;
|
|
14465
|
+
}
|
|
14466
|
+
else if (innerText) {
|
|
14467
|
+
nonBoldText += innerText;
|
|
14468
|
+
}
|
|
14469
|
+
}
|
|
14470
|
+
const text = boldText.trim();
|
|
14471
|
+
// Mixed bold/plain text is an emphasized phrase inside a normal paragraph, not a heading.
|
|
14472
|
+
if (!text || nonBoldText.trim() || text.length > 120) {
|
|
14473
|
+
return null;
|
|
14474
|
+
}
|
|
14475
|
+
// Title-sized bold text (>=16pt, matching the article's own heading) isn't a TOC entry.
|
|
14476
|
+
if (maxFontSizePt >= 16) {
|
|
14477
|
+
return null;
|
|
14478
|
+
}
|
|
14479
|
+
return { id: block.id, text };
|
|
14480
|
+
}
|
|
14481
|
+
stripHtml(html) {
|
|
14482
|
+
if (!html) {
|
|
14483
|
+
return '';
|
|
14484
|
+
}
|
|
14485
|
+
return html
|
|
14486
|
+
.replace(/<[^>]*>/g, '')
|
|
14487
|
+
.replace(/ /g, ' ')
|
|
14488
|
+
.replace(/&/g, '&')
|
|
14489
|
+
.trim();
|
|
14490
|
+
}
|
|
14491
|
+
setupScrollSpy() {
|
|
14492
|
+
if (!this.isBrowser) {
|
|
14493
|
+
return;
|
|
14494
|
+
}
|
|
14495
|
+
this.tocObserver?.disconnect();
|
|
14496
|
+
const anchors = Array.from(this._elementRef.nativeElement.querySelectorAll('.toc-anchor'));
|
|
14497
|
+
if (!anchors.length) {
|
|
14498
|
+
return;
|
|
14499
|
+
}
|
|
14500
|
+
this.tocObserver = new IntersectionObserver(entries => {
|
|
14501
|
+
const visible = entries.filter(entry => entry.isIntersecting);
|
|
14502
|
+
if (visible.length) {
|
|
14503
|
+
this.activeTocId = visible[0].target.id.replace('block-', '');
|
|
14504
|
+
}
|
|
14505
|
+
}, { rootMargin: '0px 0px -70% 0px' });
|
|
14506
|
+
anchors.forEach(anchor => this.tocObserver?.observe(anchor));
|
|
14507
|
+
}
|
|
14508
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewBlogComponent, deps: [{ token: EventsService }, { token: i0.ElementRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14509
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewBlogComponent, isStandalone: true, selector: "simpo-view-blog", inputs: { responseData: "responseData" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"main-section\">\n <div class=\"blog-container\">\n <h1 class=\"blog-title\" *ngIf=\"responseData?.postTitle\">\n {{ responseData.postTitle }}\n </h1>\n\n <div class=\"meta-bar\">\n <div class=\"meta-item\">\n <span class=\"meta-label\">Publication Date</span>\n <span class=\"meta-value\">{{\n responseData?.publishedDate ||\n responseData?.blogScheduledDate ||\n responseData?.createdTimeStamp | date: 'd MMMM y'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Author</span>\n <span class=\"meta-value\">{{\n responseData?.author?.content || '\u2014'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Read Time</span>\n <span class=\"meta-value\"\n >{{ responseData?.readTime || '\u2014' }} min read</span\n >\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Views</span>\n <span class=\"meta-value\">{{ responseData?.totalVisits || 0 }}+</span>\n </div>\n </div>\n\n <div class=\"blog-layout\" [class.with-toc]=\"tocItems.length > 1\">\n <aside class=\"toc-sidebar\" *ngIf=\"tocItems.length > 1\">\n <button\n type=\"button\"\n class=\"toc-toggle\"\n (click)=\"tocOpen = !tocOpen\"\n [attr.aria-expanded]=\"tocOpen\">\n <span>Table Of Content</span>\n <span class=\"toc-toggle-icon\" [class.open]=\"tocOpen\"></span>\n </button>\n <div class=\"toc-header\">Table Of Content</div>\n <nav class=\"toc-list\" [class.open]=\"tocOpen\">\n <a\n *ngFor=\"let toc of tocItems\"\n class=\"toc-link\"\n [class.active]=\"activeTocId === toc.id\"\n [href]=\"'#block-' + toc.id\"\n (click)=\"scrollToBlock($event, toc.id)\">\n {{ toc.text }}\n </a>\n </nav>\n </aside>\n\n <div class=\"blog-details\">\n <ng-container *ngFor=\"let item of responseData?.blocks\">\n <div\n *ngIf=\"item.type == 'header' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <h1 *ngIf=\"item.data.level == 1\" [innerHTML]=\"item.data.text\"></h1>\n <h2 *ngIf=\"item.data.level == 2\" [innerHTML]=\"item.data.text\"></h2>\n <h3 *ngIf=\"item.data.level == 3\" [innerHTML]=\"item.data.text\"></h3>\n <h4 *ngIf=\"item.data.level == 4\" [innerHTML]=\"item.data.text\"></h4>\n <h5 *ngIf=\"item.data.level == 5\" [innerHTML]=\"item.data.text\"></h5>\n <h6 *ngIf=\"item.data.level == 6\" [innerHTML]=\"item.data.text\"></h6>\n </div>\n <div\n *ngIf=\"item.type == 'paragraph' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <p\n class=\"inner-text\"\n [class.heading-paragraph]=\"isTocAnchor(item.id)\"\n [innerHTML]=\"item.data.text\"></p>\n </div>\n <div *ngIf=\"item.type == 'list'\">\n <div *ngIf=\"item.data.style == 'ordered'\">\n <ol class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ol>\n </div>\n <div *ngIf=\"item.data.style == 'unordered'\">\n <ul class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ul>\n </div>\n </div>\n <div *ngIf=\"item.type == 'delimiter'\" class=\"ce-delimiter\"></div>\n <div *ngIf=\"item.type == 'image'\" class=\"image-container\">\n <img\n loading=\"lazy\"\n [src]=\"item.data.file.url\"\n alt=\"\"\n loading=\"lazy\" />\n </div>\n <div *ngIf=\"item.type == 'table'\">\n <div class=\"table-wrapper\">\n <table\n [class.table-no-heading]=\"item.data.withHeadings === false\">\n <ng-container *ngFor=\"let data of item.data.content\">\n <tr>\n <ng-container *ngFor=\"let item of data\">\n <td [innerHTML]=\"item\"></td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</section>\n", styles: [":host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-section{padding:2% 5%;background-color:#fff}.blog-container{width:85%;margin:0 auto}.blog-title{font-size:2em;font-weight:700;line-height:1.25em;margin:0 0 20px}.meta-bar{display:flex;gap:12px;margin-bottom:28px}.meta-item{flex:1;background-color:#f5f5f5;border-radius:6px;padding:12px 10px;text-align:center}.meta-label{display:block;font-size:.75em;color:#8a8a8a;letter-spacing:.02em;margin-bottom:6px}.meta-value{display:block;font-size:.95em;font-weight:700;color:#1a1a1a}.blog-layout{display:block}.blog-layout.with-toc{display:flex;align-items:flex-start;gap:40px}.with-toc .blog-details{flex:1;min-width:0;order:1}.toc-sidebar{width:340px;flex-shrink:0;position:sticky;top:20px;background-color:#f5f5f5;border-radius:6px;padding:16px;order:2}.toc-header{font-weight:700;font-size:1.05em;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #dcdcdc}.toc-toggle{display:none;width:100%;align-items:center;justify-content:space-between;background:none;border:none;font-weight:700;font-size:1.05em;padding:0;cursor:pointer}.toc-toggle-icon{width:10px;height:10px;border-right:2px solid #1a1a1a;border-bottom:2px solid #1a1a1a;transform:rotate(45deg);transition:transform .2s ease}.toc-toggle-icon.open{transform:rotate(-135deg)}.toc-list{display:flex;flex-direction:column;gap:14px;max-height:600px;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:#c9c9c9 transparent}.toc-list::-webkit-scrollbar{display:block;width:6px}.toc-list::-webkit-scrollbar-track{background-color:transparent}.toc-list::-webkit-scrollbar-thumb{display:block;background-color:#c9c9c9;border-radius:3px}.toc-link{color:#6f6f6f;text-decoration:none;font-size:.92em;line-height:1.4em}.toc-link:hover{color:#1a1a1a}.toc-link.active{color:#1a1a1a;font-weight:700}.delimiter{display:flex;justify-content:center}.ce-delimiter:before{display:inline-block;content:\"***\";font-size:30px;line-height:65px;height:30px;letter-spacing:.2em}p{line-height:1.6em}.back-text{@include body16r();margin-left:9px;margin-top:1px;cursor:pointer}.table-wrapper{width:100%;overflow-x:auto;margin:16px 0;border-radius:8px;border:1px solid #ececec}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ececec;padding:10px 14px;text-align:left}table:not(.table-no-heading) tr:first-child td{background-color:#eee;font-weight:700;text-transform:uppercase;font-size:.82em}table:not(.table-no-heading) tr:not(:first-child):nth-child(2n) td{background-color:#fafafa}table.table-no-heading tr:nth-child(odd) td{background-color:#fafafa}.header{margin-top:8px;margin-bottom:14px;padding-left:20px}.header img,.configuration-tab img{cursor:pointer}.blogs-totalsection{background:#eee;position:absolute;top:55px;height:calc(100vh - 55px);width:81.7%;z-index:10;overflow-y:scroll;padding:14px}.blog-title{line-height:35px}.image-container{width:100%;margin:10px 0}.image-container img{width:100%}h1,h2,h3,h4,h5,h6{padding:.6em 0 3px}.h1,.h2,.h3,h1,h2,h3{margin-top:0}h2,h3,h4,h5,h6,.inner-text.heading-paragraph{font-weight:700;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #ececec}.list-style{margin:16px 0;padding-left:22px;list-style-position:outside}.list-style li{text-align:left;line-height:1.6em;padding-left:6px}.list-style li:not(:last-child){margin-bottom:10px}.list-style li::marker{color:#1a1a1a;font-weight:700}@media only screen and (max-width: 900px){.blog-container{width:100%}.blog-layout.with-toc{flex-direction:column}.toc-sidebar{width:100%;position:static;box-sizing:border-box;order:0}.with-toc .blog-details{order:1}.toc-header{display:none}.toc-toggle{display:flex}.toc-list{display:none;margin-top:12px}.toc-list.open{display:flex}.meta-bar{flex-wrap:wrap}.meta-item{flex-basis:calc(50% - 6px)}}@media only screen and (max-width: 500px){.blog-details{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
|
|
13986
14510
|
}
|
|
13987
14511
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewBlogComponent, decorators: [{
|
|
13988
14512
|
type: Component,
|
|
13989
|
-
args: [{ selector: 'simpo-view-blog', standalone: true, imports: [CommonModule], template: "<section class=\"main-section\">\n <div class=\"blog-
|
|
13990
|
-
}], ctorParameters: () => [{ type: EventsService }
|
|
14513
|
+
args: [{ selector: 'simpo-view-blog', standalone: true, imports: [CommonModule, DatePipe], template: "<section class=\"main-section\">\n <div class=\"blog-container\">\n <h1 class=\"blog-title\" *ngIf=\"responseData?.postTitle\">\n {{ responseData.postTitle }}\n </h1>\n\n <div class=\"meta-bar\">\n <div class=\"meta-item\">\n <span class=\"meta-label\">Publication Date</span>\n <span class=\"meta-value\">{{\n responseData?.publishedDate ||\n responseData?.blogScheduledDate ||\n responseData?.createdTimeStamp | date: 'd MMMM y'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Author</span>\n <span class=\"meta-value\">{{\n responseData?.author?.content || '\u2014'\n }}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Read Time</span>\n <span class=\"meta-value\"\n >{{ responseData?.readTime || '\u2014' }} min read</span\n >\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Views</span>\n <span class=\"meta-value\">{{ responseData?.totalVisits || 0 }}+</span>\n </div>\n </div>\n\n <div class=\"blog-layout\" [class.with-toc]=\"tocItems.length > 1\">\n <aside class=\"toc-sidebar\" *ngIf=\"tocItems.length > 1\">\n <button\n type=\"button\"\n class=\"toc-toggle\"\n (click)=\"tocOpen = !tocOpen\"\n [attr.aria-expanded]=\"tocOpen\">\n <span>Table Of Content</span>\n <span class=\"toc-toggle-icon\" [class.open]=\"tocOpen\"></span>\n </button>\n <div class=\"toc-header\">Table Of Content</div>\n <nav class=\"toc-list\" [class.open]=\"tocOpen\">\n <a\n *ngFor=\"let toc of tocItems\"\n class=\"toc-link\"\n [class.active]=\"activeTocId === toc.id\"\n [href]=\"'#block-' + toc.id\"\n (click)=\"scrollToBlock($event, toc.id)\">\n {{ toc.text }}\n </a>\n </nav>\n </aside>\n\n <div class=\"blog-details\">\n <ng-container *ngFor=\"let item of responseData?.blocks\">\n <div\n *ngIf=\"item.type == 'header' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <h1 *ngIf=\"item.data.level == 1\" [innerHTML]=\"item.data.text\"></h1>\n <h2 *ngIf=\"item.data.level == 2\" [innerHTML]=\"item.data.text\"></h2>\n <h3 *ngIf=\"item.data.level == 3\" [innerHTML]=\"item.data.text\"></h3>\n <h4 *ngIf=\"item.data.level == 4\" [innerHTML]=\"item.data.text\"></h4>\n <h5 *ngIf=\"item.data.level == 5\" [innerHTML]=\"item.data.text\"></h5>\n <h6 *ngIf=\"item.data.level == 6\" [innerHTML]=\"item.data.text\"></h6>\n </div>\n <div\n *ngIf=\"item.type == 'paragraph' && hasVisibleText(item.data?.text)\"\n [id]=\"'block-' + item.id\"\n [class.toc-anchor]=\"isTocAnchor(item.id)\">\n <p\n class=\"inner-text\"\n [class.heading-paragraph]=\"isTocAnchor(item.id)\"\n [innerHTML]=\"item.data.text\"></p>\n </div>\n <div *ngIf=\"item.type == 'list'\">\n <div *ngIf=\"item.data.style == 'ordered'\">\n <ol class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ol>\n </div>\n <div *ngIf=\"item.data.style == 'unordered'\">\n <ul class=\"list-style\">\n <ng-container *ngFor=\"let list of item.data.items\">\n <li [innerHTML]=\"list\"></li>\n </ng-container>\n </ul>\n </div>\n </div>\n <div *ngIf=\"item.type == 'delimiter'\" class=\"ce-delimiter\"></div>\n <div *ngIf=\"item.type == 'image'\" class=\"image-container\">\n <img\n loading=\"lazy\"\n [src]=\"item.data.file.url\"\n alt=\"\"\n loading=\"lazy\" />\n </div>\n <div *ngIf=\"item.type == 'table'\">\n <div class=\"table-wrapper\">\n <table\n [class.table-no-heading]=\"item.data.withHeadings === false\">\n <ng-container *ngFor=\"let data of item.data.content\">\n <tr>\n <ng-container *ngFor=\"let item of data\">\n <td [innerHTML]=\"item\"></td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</section>\n", styles: [":host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-section{padding:2% 5%;background-color:#fff}.blog-container{width:85%;margin:0 auto}.blog-title{font-size:2em;font-weight:700;line-height:1.25em;margin:0 0 20px}.meta-bar{display:flex;gap:12px;margin-bottom:28px}.meta-item{flex:1;background-color:#f5f5f5;border-radius:6px;padding:12px 10px;text-align:center}.meta-label{display:block;font-size:.75em;color:#8a8a8a;letter-spacing:.02em;margin-bottom:6px}.meta-value{display:block;font-size:.95em;font-weight:700;color:#1a1a1a}.blog-layout{display:block}.blog-layout.with-toc{display:flex;align-items:flex-start;gap:40px}.with-toc .blog-details{flex:1;min-width:0;order:1}.toc-sidebar{width:340px;flex-shrink:0;position:sticky;top:20px;background-color:#f5f5f5;border-radius:6px;padding:16px;order:2}.toc-header{font-weight:700;font-size:1.05em;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #dcdcdc}.toc-toggle{display:none;width:100%;align-items:center;justify-content:space-between;background:none;border:none;font-weight:700;font-size:1.05em;padding:0;cursor:pointer}.toc-toggle-icon{width:10px;height:10px;border-right:2px solid #1a1a1a;border-bottom:2px solid #1a1a1a;transform:rotate(45deg);transition:transform .2s ease}.toc-toggle-icon.open{transform:rotate(-135deg)}.toc-list{display:flex;flex-direction:column;gap:14px;max-height:600px;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:#c9c9c9 transparent}.toc-list::-webkit-scrollbar{display:block;width:6px}.toc-list::-webkit-scrollbar-track{background-color:transparent}.toc-list::-webkit-scrollbar-thumb{display:block;background-color:#c9c9c9;border-radius:3px}.toc-link{color:#6f6f6f;text-decoration:none;font-size:.92em;line-height:1.4em}.toc-link:hover{color:#1a1a1a}.toc-link.active{color:#1a1a1a;font-weight:700}.delimiter{display:flex;justify-content:center}.ce-delimiter:before{display:inline-block;content:\"***\";font-size:30px;line-height:65px;height:30px;letter-spacing:.2em}p{line-height:1.6em}.back-text{@include body16r();margin-left:9px;margin-top:1px;cursor:pointer}.table-wrapper{width:100%;overflow-x:auto;margin:16px 0;border-radius:8px;border:1px solid #ececec}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ececec;padding:10px 14px;text-align:left}table:not(.table-no-heading) tr:first-child td{background-color:#eee;font-weight:700;text-transform:uppercase;font-size:.82em}table:not(.table-no-heading) tr:not(:first-child):nth-child(2n) td{background-color:#fafafa}table.table-no-heading tr:nth-child(odd) td{background-color:#fafafa}.header{margin-top:8px;margin-bottom:14px;padding-left:20px}.header img,.configuration-tab img{cursor:pointer}.blogs-totalsection{background:#eee;position:absolute;top:55px;height:calc(100vh - 55px);width:81.7%;z-index:10;overflow-y:scroll;padding:14px}.blog-title{line-height:35px}.image-container{width:100%;margin:10px 0}.image-container img{width:100%}h1,h2,h3,h4,h5,h6{padding:.6em 0 3px}.h1,.h2,.h3,h1,h2,h3{margin-top:0}h2,h3,h4,h5,h6,.inner-text.heading-paragraph{font-weight:700;padding-bottom:12px;margin-bottom:8px;border-bottom:1px solid #ececec}.list-style{margin:16px 0;padding-left:22px;list-style-position:outside}.list-style li{text-align:left;line-height:1.6em;padding-left:6px}.list-style li:not(:last-child){margin-bottom:10px}.list-style li::marker{color:#1a1a1a;font-weight:700}@media only screen and (max-width: 900px){.blog-container{width:100%}.blog-layout.with-toc{flex-direction:column}.toc-sidebar{width:100%;position:static;box-sizing:border-box;order:0}.with-toc .blog-details{order:1}.toc-header{display:none}.toc-toggle{display:flex}.toc-list{display:none;margin-top:12px}.toc-list.open{display:flex}.meta-bar{flex-wrap:wrap}.meta-item{flex-basis:calc(50% - 6px)}}@media only screen and (max-width: 500px){.blog-details{width:100%}}\n"] }]
|
|
14514
|
+
}], ctorParameters: () => [{ type: EventsService }, { type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
14515
|
+
type: Inject,
|
|
14516
|
+
args: [PLATFORM_ID]
|
|
14517
|
+
}] }], propDecorators: { responseData: [{
|
|
13991
14518
|
type: Input
|
|
13992
14519
|
}] } });
|
|
13993
14520
|
|