Skip to content

Commit

Permalink
Merge pull request #10 from swawa-yu/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
swawa-yu authored Dec 29, 2023
2 parents 12ae963 + 3ebc7c3 commit 3374b83
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ function App() {
jikiKubun: '指定なし',
courseType: '指定なし',
language: '指定なし',
rishuNenji: "指定なし",
rishuNenjiFilter: "以下"
});

const handleSearch = (newSearchOptions: SearchOptions) => {
Expand Down
28 changes: 28 additions & 0 deletions src/search/SearchComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ const SearchComponent: React.FC<SearchComponentProps> = ({ onSearch, bookmarkedS
jikiKubun: "指定なし",
courseType: "指定なし",
language: "指定なし",
rishuNenji: "指定なし",
rishuNenjiFilter: "以下"
};
const [searchOptions, setSearchOptions] = useState<SearchOptions>(initialSearchOptions);

Expand Down Expand Up @@ -172,6 +174,32 @@ const SearchComponent: React.FC<SearchComponentProps> = ({ onSearch, bookmarkedS
</select>
</div>

<div className='search-group'>
<label htmlFor="rishu-nenji-select">履修年次:</label>
<select
id="rishu-nenji-select"
value={searchOptions.rishuNenji}
onChange={(e) => setSearchOptions({ ...searchOptions, rishuNenji: e.target.value as SearchOptions['rishuNenji'] })}
>
<option value="指定なし">指定なし</option>
<option value="1">1年次</option>
<option value="2">2年次</option>
<option value="3">3年次</option>
<option value="4">4年次</option>
<option value="5">5年次</option>
<option value="6">6年次</option>
</select>
<select
id="rishu-nenji-filter-select"
value={searchOptions.rishuNenjiFilter}
onChange={(e) => setSearchOptions({ ...searchOptions, rishuNenjiFilter: e.target.value as SearchOptions['rishuNenjiFilter'] })}
>
<option value="以下">以下</option>
<option value="のみ">のみ</option>
</select>
</div>


</div>
<div>
<div className='search-group'>
Expand Down
11 changes: 10 additions & 1 deletion src/search/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export interface SearchOptions {
jikiKubun: JikiKubun | "指定なし"
courseType: "学部" | "大学院" | "指定なし"
language: Language | "指定なし"
rishuNenji: number | "指定なし"
rishuNenjiFilter: "以下" | "のみ"
}

// 検索条件で絞り込んだ科目のリスト(講義コードのリスト)を返す
Expand Down Expand Up @@ -129,6 +131,12 @@ function matchesLanguage(subject: Subject2, searchOptions: SearchOptions): boole
subject["使用言語"] as Language === searchOptions.language;
}

function matchesRishuNenji(subject: Subject2, searchOptions: SearchOptions): boolean {
return searchOptions.rishuNenji === "指定なし" ||
searchOptions.rishuNenjiFilter === "以下" && subject["履修年次"] <= searchOptions.rishuNenji ||
searchOptions.rishuNenjiFilter === "のみ" && subject["履修年次"] == searchOptions.rishuNenji;
}

// TODO: すべての要素を調べるのは効率が悪いので改善したい
export function matchesSearchOptions(subject: Subject2, searchOptions: SearchOptions): boolean {
return matchesCampus(subject, searchOptions) &&
Expand All @@ -141,5 +149,6 @@ export function matchesSearchOptions(subject: Subject2, searchOptions: SearchOpt
matchesYoubiKoma(subject, searchOptions) &&
matchesBookmark(subject, searchOptions) &&
matchesCourseType(subject, searchOptions) &&
matchesLanguage(subject, searchOptions);
matchesLanguage(subject, searchOptions) &&
matchesRishuNenji(subject, searchOptions);
}
7 changes: 4 additions & 3 deletions src/subject/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ export interface Jigen {

export interface Schedule {
jikiKubun: JikiKubun // 1ターム、2ターム、3ターム、4ターム、セメスター(前期)、セメスター(後期)、ターム外(前期)、ターム外(後期)、年度、通年、集中
jigen: Jigen | undefined // 集中講義の場合はundefined // TODO: でよいのか?("集中"とする方法)
rooms: string[] // 何も書かれていない場合は空文字列, // TODO 本当は[string]のほうが良さそう
jigen: Jigen | undefined // 集中講義の場合はundefined
rooms: string[] // 何も書かれていない場合は空文字列
}

// TODO 「解析エラー」としているが、他に適切な書き方がありそう
Expand Down Expand Up @@ -47,7 +47,7 @@ export type KaikouBukyokuGakubu = typeof kaikouBukyokuGakubus[number]
export type KaikouBukyokuDaigakuin = typeof kaikouBukyokuDaigakuins[number]
export type KaikouBukyoku = typeof kaikouBukyokus[number]

// tips: コロンは":"だったり" : "だったりするが、ここでは" : "に統一する
// tips: コロンは":"だったり" : "だったりするが、ここでは講義詳細ページで使われている" : "に統一する
export const languages = ["J : 日本語", "E : 英語", "B : 日本語・英語", "O : その他"] as const
export type Language = typeof languages[number] | "解析エラー"

Expand Down Expand Up @@ -75,6 +75,7 @@ export type SubjectProperty =

export type Subject = { [key in SubjectProperty]: string }

// Subject2をはじめに作っておくことで検索時に毎回parseする必要がなくなる
export type Subject2 = {
"relative URL": string,
"年度": string,
Expand Down

0 comments on commit 3374b83

Please sign in to comment.