@nakamura-123/pages 0.1.45 → 0.1.46

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.
@@ -12,4 +12,5 @@ type DailyData = {
12
12
  export declare const checkDaily: (dailyData: DailyData, info: BadgeInfo) => boolean;
13
13
  export declare const addDailyBadgeTitleInfo: (badge: BadgeInfo, t: any) => BadgeInfo;
14
14
  export declare const getDailyLogData: (DailyDB: RD) => DailyData;
15
+ export declare const getBestDailyLogData: (DailyDB: RD) => DailyData;
15
16
  export {};
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.getDailyLogData = exports.addDailyBadgeTitleInfo = exports.checkDaily = void 0;
14
+ exports.getBestDailyLogData = exports.getDailyLogData = exports.addDailyBadgeTitleInfo = exports.checkDaily = void 0;
15
15
  var lib_1 = require("@nakamura-123/lib");
16
16
  var gradeFnc_1 = require("./gradeFnc");
17
17
  // デイリーバッジの取得条件を確認
@@ -39,7 +39,7 @@ var addDailyBadgeTitleInfo = function (badge, t) {
39
39
  return __assign(__assign({}, badge), { title: title, subject: "daily", category: fnc });
40
40
  };
41
41
  exports.addDailyBadgeTitleInfo = addDailyBadgeTitleInfo;
42
- // デイリーログの情報を取得
42
+ // # 今日時点のデイリーログの情報を取得
43
43
  var getDailyLogData = function (DailyDB) {
44
44
  // 今日の問題数取得
45
45
  var today = lib_1.timeFnc.getToday();
@@ -61,3 +61,22 @@ var getDailyLogData = function (DailyDB) {
61
61
  };
62
62
  };
63
63
  exports.getDailyLogData = getDailyLogData;
64
+ // # 過去も含めてすべてのデイリーログ情報からベストデータを取得
65
+ var getBestDailyLogData = function (DailyDB) {
66
+ // rd 1. 1日の最高問題数
67
+ var maxQuizCntLog = (0, gradeFnc_1.findMaxQuizCntLog)(DailyDB);
68
+ var maxQuizCnt = maxQuizCntLog ? maxQuizCntLog.quizCnt : 0;
69
+ // rd 2. 週間の最高問題数
70
+ var weeklyMaxQuizCnt = (0, gradeFnc_1.getMaxWeeklyQuizCnt)(DailyDB);
71
+ // rd 3. 通算問題数を取得
72
+ var totalCnt = (0, gradeFnc_1.getTotalQuizCnt)(DailyDB);
73
+ // rd 4. 通算学習日数を取得
74
+ var longestConsecutiveDays = (0, gradeFnc_1.getLongestConsecutiveStudyDays)(DailyDB);
75
+ return {
76
+ today: maxQuizCnt,
77
+ weekly: weeklyMaxQuizCnt,
78
+ total: totalCnt,
79
+ consecutive: longestConsecutiveDays,
80
+ };
81
+ };
82
+ exports.getBestDailyLogData = getBestDailyLogData;
@@ -11,5 +11,5 @@ type Selected = QSelected.Selected;
11
11
  type BadgeInfo = badgeSet.BadgeInfo;
12
12
  export declare const checkBasicBadge: (BadgeDB: RB, MiniDB: RM, selected: Selected) => BadgeInfo[];
13
13
  export declare const checkTestBadge: (BadgeDB: RB, TestDB: RT, selected: Selected) => BadgeInfo[];
14
- export declare const checkDailyLogBadge: (BadgeDB: RB, DailyLogDB: RD, t: any) => BadgeInfo[];
14
+ export declare const checkDailyLogBadge: (BadgeDB: RB, DailyLogDB: RD, t: any, isPast?: boolean) => BadgeInfo[];
15
15
  export {};
@@ -51,20 +51,20 @@ var checkTestBadge = function (BadgeDB, TestDB, selected) {
51
51
  };
52
52
  exports.checkTestBadge = checkTestBadge;
53
53
  // # 3.デイリーログのバッジを取得
54
- var checkDailyLogBadge = function (BadgeDB, DailyLogDB, t) {
55
- // ### 01.未取得のバッジinfoを配列で取得
54
+ var checkDailyLogBadge = function (BadgeDB, DailyLogDB, t, isPast) {
55
+ if (isPast === void 0) { isPast = false; }
56
+ // rd 01.未取得のバッジinfoを配列で取得
56
57
  var collectedBadges = (0, badgeFilter_1.filterDailyLogBadge)(BadgeDB);
57
58
  var missingBadgeInfos = (0, badgeBasicFnc_1.getMissingDailyBadgeInfos)(collectedBadges);
58
- // ### 02.デイリーログの情報を取得(今日の問題数、今週の問題数、累計問題数、連続日数)
59
- var dailyLogData = (0, badgeDailyFnc_1.getDailyLogData)(DailyLogDB);
60
- console.log("collectedBadges", collectedBadges);
61
- console.log("dailyLogData", dailyLogData);
62
- console.log("missingBadgeInfos", missingBadgeInfos);
63
- // ### 03.取得条件を満たしているバッジを判定
59
+ // rd 02.デイリーログの情報を取得(今日の問題数、今週の問題数、累計問題数、連続日数)
60
+ var dailyLogData = isPast
61
+ ? (0, badgeDailyFnc_1.getBestDailyLogData)(DailyLogDB)
62
+ : (0, badgeDailyFnc_1.getDailyLogData)(DailyLogDB);
63
+ // rd 03.取得条件を満たしているバッジを判定
64
64
  var eligibleBadges = missingBadgeInfos.filter(function (info) {
65
65
  return (0, badgeDailyFnc_1.checkDaily)(dailyLogData, info);
66
66
  });
67
- // ### 04.タイトルなどの必要情報を挿入
67
+ // rd 04.タイトルなどの必要情報を挿入
68
68
  eligibleBadges = eligibleBadges.map(function (badge) {
69
69
  return (0, badgeDailyFnc_1.addDailyBadgeTitleInfo)(badge, t);
70
70
  });
@@ -13,5 +13,6 @@ export declare const findMaxQuizCntLog: (DailyDB: RD) => DailyLogSchema | null;
13
13
  export declare const getTotalQuizCnt: (DailyLogDB: RD) => number;
14
14
  export declare const getConsecutiveStudyDays: (DailyLogDB: RD) => number;
15
15
  export declare const getLongestConsecutiveStudyDays: (DailyLogDB: RD) => number;
16
+ export declare const getMaxWeeklyQuizCnt: (DailyLogDB: RD, weeks?: number) => number;
16
17
  export declare const promptStoreReview: () => Promise<void>;
17
18
  export {};
@@ -62,10 +62,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
62
62
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
63
  };
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.promptStoreReview = exports.getLongestConsecutiveStudyDays = exports.getConsecutiveStudyDays = exports.getTotalQuizCnt = exports.findMaxQuizCntLog = exports.getWeeklyCnts = exports.formatTodayLog = void 0;
65
+ exports.promptStoreReview = exports.getMaxWeeklyQuizCnt = exports.getLongestConsecutiveStudyDays = exports.getConsecutiveStudyDays = exports.getTotalQuizCnt = exports.findMaxQuizCntLog = exports.getWeeklyCnts = exports.formatTodayLog = void 0;
66
66
  var dayjs_1 = __importDefault(require("dayjs"));
67
67
  var StoreReview = __importStar(require("expo-store-review"));
68
- // (day)指定した日の1日のログを整形して返す
68
+ // # (day)指定した日の1日のログを整形して返す
69
69
  var formatTodayLog = function (todayLog) {
70
70
  var quizCnt = (todayLog === null || todayLog === void 0 ? void 0 : todayLog.quizCnt) || 0;
71
71
  var targetCnt = (todayLog === null || todayLog === void 0 ? void 0 : todayLog.targetCnt) || 0;
@@ -74,7 +74,7 @@ var formatTodayLog = function (todayLog) {
74
74
  return { quizCnt: quizCnt, targetCnt: targetCnt, isAchieved: isAchieved, isNotified: isNotified };
75
75
  };
76
76
  exports.formatTodayLog = formatTodayLog;
77
- // 1週間の各日に、何問解いたかをweeklyDaysの日付から順に配列で返す。
77
+ // # 1週間の各日に、何問解いたかをweeklyDaysの日付から順に配列で返す。
78
78
  var getWeeklyCnts = function (DailyLog, weeklyDays) {
79
79
  return weeklyDays.map(function (day) {
80
80
  var date = day.toDate();
@@ -83,20 +83,20 @@ var getWeeklyCnts = function (DailyLog, weeklyDays) {
83
83
  });
84
84
  };
85
85
  exports.getWeeklyCnts = getWeeklyCnts;
86
- // 1日の最大問題数を持つログを取得
86
+ // # 1日の最大問題数を持つログを取得
87
87
  var findMaxQuizCntLog = function (DailyDB) {
88
88
  // すべてのレコードを取得
89
89
  var allLogs = DailyDB.sorted("quizCnt", true); // quizCntで降順にソート
90
90
  return allLogs.length > 0 ? allLogs[0] : null; // 最初のレコードが最大値を持つ
91
91
  };
92
92
  exports.findMaxQuizCntLog = findMaxQuizCntLog;
93
- // 全期間の問題数の通算を算出する
93
+ // # 全期間の問題数の通算を算出する
94
94
  var getTotalQuizCnt = function (DailyLogDB) {
95
95
  return DailyLogDB.reduce(function (total, log) { return total + (log.quizCnt || 0); }, 0);
96
96
  };
97
97
  exports.getTotalQuizCnt = getTotalQuizCnt;
98
98
  //
99
- // 連続学習日数を取得
99
+ // # 連続学習日数を取得
100
100
  var getConsecutiveStudyDays = function (DailyLogDB) {
101
101
  var today = (0, dayjs_1.default)(); // 現在の日付を取得
102
102
  var dailyLogs = DailyLogDB.sorted("date", true); // 日付で降順にソート
@@ -141,6 +141,25 @@ var getLongestConsecutiveStudyDays = function (DailyLogDB) {
141
141
  return longestStreak;
142
142
  };
143
143
  exports.getLongestConsecutiveStudyDays = getLongestConsecutiveStudyDays;
144
+ // # 指定した週数分の各週の合計問題数の最大値を返す
145
+ var getMaxWeeklyQuizCnt = function (DailyLogDB, weeks) {
146
+ if (weeks === void 0) { weeks = 20; }
147
+ var today = (0, dayjs_1.default)();
148
+ var maxCnt = 0;
149
+ for (var i = 0; i < weeks; i++) {
150
+ var weekStart = today.subtract(i, "week").startOf("week").add(1, "day");
151
+ var weekEnd = today.subtract(i, "week").endOf("week").add(1, "day");
152
+ // その週のログを抽出
153
+ var weekLogs = DailyLogDB.filtered("date >= $0 && date <= $1", weekStart.toDate(), weekEnd.toDate());
154
+ // その週のquizCnt合計
155
+ var weekCnt = weekLogs.reduce(function (sum, log) { return sum + (log.quizCnt || 0); }, 0);
156
+ if (weekCnt > maxCnt) {
157
+ maxCnt = weekCnt;
158
+ }
159
+ }
160
+ return maxCnt;
161
+ };
162
+ exports.getMaxWeeklyQuizCnt = getMaxWeeklyQuizCnt;
144
163
  var promptStoreReview = function () { return __awaiter(void 0, void 0, void 0, function () {
145
164
  var isAvailable;
146
165
  return __generator(this, function (_a) {
@@ -1,9 +1,32 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- var react_1 = __importDefault(require("react"));
29
+ var react_1 = __importStar(require("react"));
7
30
  var react_native_1 = require("react-native");
8
31
  var react_native_gesture_handler_1 = require("react-native-gesture-handler");
9
32
  var common_1 = require("@nakamura-123/common");
@@ -11,10 +34,28 @@ var Badge5s_1 = __importDefault(require("../component/Basic/Badge5s"));
11
34
  var lib_1 = require("@nakamura-123/lib");
12
35
  var BasicBadge_1 = __importDefault(require("../component/Grade/BasicBadge"));
13
36
  var react_i18next_1 = require("react-i18next");
37
+ var react_2 = require("@realm/react");
38
+ var db_1 = require("@nakamura-123/db");
39
+ var badgeFnc_1 = require("../functions/badgeFnc");
40
+ var react_redux_1 = require("react-redux");
14
41
  // メインコンポーネント
15
42
  var BadgePage = function (_a) {
16
43
  var basicBadgeInfos = _a.basicBadgeInfos, testBadgeInfos = _a.testBadgeInfos;
17
44
  var t = (0, react_i18next_1.useTranslation)().t;
45
+ // ## デイリーバッジの取得条件を再度確認する
46
+ var realm = (0, react_2.useRealm)();
47
+ var dispatch = (0, react_redux_1.useDispatch)();
48
+ var BadgeDB = (0, react_2.useQuery)(db_1.BadgeSchema);
49
+ var DailyLogDB = (0, react_2.useQuery)(db_1.DailyLogSchema);
50
+ (0, react_1.useEffect)(function () {
51
+ // yl 取得条件を満たしており、未取得のバッジ
52
+ var dailyLogBadges = (0, badgeFnc_1.checkDailyLogBadge)(BadgeDB, DailyLogDB, t, true);
53
+ // yl バッジをScore Storeへ保存
54
+ if (dailyLogBadges.length > 0) {
55
+ dispatch({ type: "score/replaceNotification", payload: dailyLogBadges });
56
+ db_1.BadgeModel.createBadge(realm, dailyLogBadges);
57
+ }
58
+ }, []);
18
59
  return (<react_native_gesture_handler_1.ScrollView style={styles.page} contentContainerStyle={styles.container}>
19
60
  {basicBadgeInfos.map(function (info) { return (<BasicBadge_1.default info={info} key={info.name}/>); })}
20
61
  {testBadgeInfos.map(function (info) { return (<TestBadge5s info={info} key={info.subject}/>); })}
@@ -124,6 +124,7 @@ var GetBadgePage = function (_a) {
124
124
  </common_1.MyText>
125
125
  </react_native_1.View>
126
126
  <react_native_1.View style={styles.btnBox}>
127
+ <common_1.MiniIconBtn onPress={function () { return navigation.navigate("Badge"); }} icon="shield-alt" title="バッジ一覧" color="ltBlack" outerStyle={styles.miniBtnOuter}/>
127
128
  <common_1.MiniIconBtn onPress={handleNext} icon="arrow-right" title="次 へ" color="blue" outerStyle={styles.miniBtnOuter}/>
128
129
  </react_native_1.View>
129
130
  </Animatable.View>
@@ -144,7 +145,7 @@ var styles = react_native_1.StyleSheet.create({
144
145
  borderWidth: 1,
145
146
  borderColor: lib_1.colors.ltBlack,
146
147
  borderRadius: 30,
147
- width: "80%",
148
+ width: "90%",
148
149
  },
149
150
  txt: {
150
151
  marginTop: 5,
@@ -169,7 +170,7 @@ var styles = react_native_1.StyleSheet.create({
169
170
  paddingVertical: 5,
170
171
  },
171
172
  miniBtnOuter: {
172
- width: "50%",
173
+ width: "45%",
173
174
  },
174
175
  });
175
176
  exports.default = GetBadgePage;