{"id":4369,"url":"https://github.com/gomjellie/react-native-timetable","last_synced_at":"2025-09-08T05:33:25.180Z","repository":{"id":36565256,"uuid":"228110923","full_name":"gomjellie/react-native-timetable","owner":"gomjellie","description":"📆timetable component library for React Native","archived":false,"fork":false,"pushed_at":"2024-01-20T12:45:54.000Z","size":2865,"stargazers_count":83,"open_issues_count":10,"forks_count":21,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-18T09:47:53.650Z","etag":null,"topics":["javascript","react-native","schedule","timetable","week-view"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gomjellie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-15T01:01:08.000Z","updated_at":"2024-11-10T04:29:44.000Z","dependencies_parsed_at":"2024-06-19T04:11:41.569Z","dependency_job_id":"2d8a29a3-8bd1-4ab6-b9e6-0c349d1ad751","html_url":"https://github.com/gomjellie/react-native-timetable","commit_stats":{"total_commits":48,"total_committers":5,"mean_commits":9.6,"dds":"0.20833333333333337","last_synced_commit":"e49e49ae686a3bebb83b8aba330e3adcd4c5cf46"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gomjellie/react-native-timetable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomjellie%2Freact-native-timetable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomjellie%2Freact-native-timetable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomjellie%2Freact-native-timetable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomjellie%2Freact-native-timetable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gomjellie","download_url":"https://codeload.github.com/gomjellie/react-native-timetable/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomjellie%2Freact-native-timetable/sbom","scorecard":{"id":435056,"data":{"date":"2025-08-11","repo":{"name":"github.com/gomjellie/react-native-timetable","commit":"e49e49ae686a3bebb83b8aba330e3adcd4c5cf46"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.1,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":4,"reason":"Found 5/11 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: example/android/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"22 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-c2jc-4fpr-4vhg","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-rxrc-rgv4-jpvx","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T04:24:53.239Z","repository_id":36565256,"created_at":"2025-08-19T04:24:53.240Z","updated_at":"2025-08-19T04:24:53.240Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274136559,"owners_count":25228398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","react-native","schedule","timetable","week-view"],"created_at":"2024-01-05T20:17:09.757Z","updated_at":"2025-09-08T05:33:24.785Z","avatar_url":"https://github.com/gomjellie.png","language":"JavaScript","funding_links":[],"categories":["Components"],"sub_categories":["UI"],"readme":"# react-native-timetable\n\ntimetable library for React Native\n\n![demo-3](./.github/iOS_screen_shot.png)\n\n# Real world example\n\n![real-world-example](./.github/timetabler.gif)\n\nDownload at [App Store](https://apps.apple.com/kr/app/%EC%9C%A0%EC%83%81%EB%AC%B4/id1476194177),    Get it On [Play Store](https://play.google.com/store/apps/details?id=com.usaintmu)\n\n#  INSTALLATION\n\n```sh\nnpm install react-native-timetable\n```\n\nNo need to link just install it.\n\n# Example\n\n```jsx\nimport React, { Component } from 'react';\nimport {\n  SafeAreaView,\n  StyleSheet,\n  View,\n  Alert,\n} from 'react-native';\nimport TimeTableView, { genTimeBlock } from 'react-native-timetable';\nconst events_data = [\n  {\n    title: \"Math\",\n    startTime: genTimeBlock(\"MON\", 9),\n    endTime: genTimeBlock(\"MON\", 10, 50),\n    location: \"Classroom 403\",\n    extra_descriptions: [\"Kim\", \"Lee\"],\n  },\n  {\n    title: \"Math\",\n    startTime: genTimeBlock(\"WED\", 9),\n    endTime: genTimeBlock(\"WED\", 10, 50),\n    location: \"Classroom 403\",\n    extra_descriptions: [\"Kim\", \"Lee\"],\n  },\n  {\n    title: \"Physics\",\n    startTime: genTimeBlock(\"MON\", 11),\n    endTime: genTimeBlock(\"MON\", 11, 50),\n    location: \"Lab 404\",\n    extra_descriptions: [\"Einstein\"],\n  },\n  {\n    title: \"Physics\",\n    startTime: genTimeBlock(\"WED\", 11),\n    endTime: genTimeBlock(\"WED\", 11, 50),\n    location: \"Lab 404\",\n    extra_descriptions: [\"Einstein\"],\n  },\n  {\n    title: \"Mandarin\",\n    startTime: genTimeBlock(\"TUE\", 9),\n    endTime: genTimeBlock(\"TUE\", 10, 50),\n    location: \"Language Center\",\n    extra_descriptions: [\"Chen\"],\n  },\n  {\n    title: \"Japanese\",\n    startTime: genTimeBlock(\"FRI\", 9),\n    endTime: genTimeBlock(\"FRI\", 10, 50),\n    location: \"Language Center\",\n    extra_descriptions: [\"Nakamura\"],\n  },\n  {\n    title: \"Club Activity\",\n    startTime: genTimeBlock(\"THU\", 9),\n    endTime: genTimeBlock(\"THU\", 10, 50),\n    location: \"Activity Center\",\n  },\n  {\n    title: \"Club Activity\",\n    startTime: genTimeBlock(\"FRI\", 13, 30),\n    endTime: genTimeBlock(\"FRI\", 14, 50),\n    location: \"Activity Center\",\n  },\n];\n\nexport default class App extends Component {\n  constructor(props) {\n    super(props);\n    this.numOfDays = 5;\n    this.pivotDate = genTimeBlock('mon');\n  }\n\n  scrollViewRef = (ref) =\u003e {\n    this.timetableRef = ref;\n  };\n\n  onEventPress = (evt) =\u003e {\n    Alert.alert(\"onEventPress\", JSON.stringify(evt));\n  };\n\n  render() {\n    return (\n      \u003cSafeAreaView style={{flex: 1}}\u003e\n        \u003cView style={styles.container}\u003e\n          \u003cTimeTableView\n            scrollViewRef={this.scrollViewRef}\n            events={events_data}\n            pivotTime={9}\n            pivotEndTime={20}\n            pivotDate={this.pivotDate}\n            nDays={this.numOfDays}\n            onEventPress={this.onEventPress}\n            headerStyle={styles.headerStyle}\n            formatDateHeader=\"dddd\"\n            locale=\"ko\"\n          /\u003e\n        \u003c/View\u003e\n      \u003c/SafeAreaView\u003e\n    );\n  }\n};\n\nconst styles = StyleSheet.create({\n  headerStyle: {\n    backgroundColor: '#81E1B8'\n  },\n  container: {\n    flex: 1,\n    backgroundColor: '#F8F8F8',\n  },\n});\n```\n\n# TimeTableView Props\n\n - [`scrollViewRef`](#scrollViewRef) (Function(`ref`)) function that takes timetableView's ref as parameter\n - [`events`](#events) (array of [`event`](#event))\n - `nDays` (Number) it must be one of `3`, `5`, `6`, `7`\n - `pivotTime` (Number `default: 8`) it tells what time to start timetable view\n - `pivotEndTime` (Number `default: 22`) it tells what time to end timetable view\n - `pivotDate` (Date, `default monday`, return value of [`genTimeBlock`](#genTimeBlock))\n - `onEventPress` (function([`event`](#event)) callBackFunction that triggered when event is pressed\n - [`headerStyle`](#headerStyle) (object) style for header\n - `formatDateHeader` (string default `\"dddd\"`) dddd -\u003e Monday, ddd -\u003e Mon [checkout more details](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/)\n - [`locale`](#locale) (string) country code\n\n## scrollViewRef\n\nType: Function\n\nfunction that takes timetableView's ref as parameter\n\nUsage:\n\n```jsx\n\u003cTimeTableView \n  scrollViewRef={(ref) =\u003e {\n    this.timetableRef = ref;\n  }}\n/\u003e\n```\n\n## events\n\nType: array of [event](#event)\n\n### event\n\nType: Object\n\n - title: String\n - startTime: Date (result of [`genTimeBlock`](#genTimeBlock))\n - endTime: Date (result of [`genTimeBlock`](#genTimeBlock))\n - location: String\n - extra_descriptions: Array Of String\n\ne.g.)\n\n```\n{\n    title: String,\n    startTime: Date, // I surely recommend to make Date using genTimeBlock function\n    endTime: Date,\n    location: String,\n    extra_descriptions: Array Of String,\n}\n```\n\n## headerStyle\n\nType: object\n\ne.g.)\n\n```\nheaderStyle: {\n  backgroundColor: '#81E1B8'\n}\n```\n\n## locale\n\nType: string (e.g. `en-US`)\n\nCheck the [locale options](https://github.com/moment/moment/tree/develop/locale) from momentjs.\n\n# Helper Functions\n\n - [`genTimeBlock`](#genTimeBlock) (function(`String`, `Number`, `Number`)) returns Date\n\n## genTimeBlock\n\nType: Function\n\n### params\n\n - dayOfWeek (String, One of `\"SUN\"`, `\"MON\"`, `\"TUE\"`, `\"WED\"`, `\"THU\"`, `\"FRI\"`, `\"SAT\"`)\n - hours (Number, default `0`)\n - minutes (Number, default `0`)\n\n# Inspirations\n\nhttps://github.com/hoangnm/react-native-week-view\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgomjellie%2Freact-native-timetable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgomjellie%2Freact-native-timetable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgomjellie%2Freact-native-timetable/lists"}