Render changelog.md instead of opening a webview #10

Closed
Ghost wants to merge 6 commits from (deleted):changelog_screen into master
6 changed files with 493 additions and 1 deletions

81
package-lock.json generated
View file

@ -3221,6 +3221,11 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"camelize": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
"integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
},
"capture-exit": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
@ -3531,6 +3536,21 @@
}
}
},
"css-color-keywords": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
"integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU="
},
"css-to-react-native": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
"integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==",
"requires": {
"camelize": "^1.0.0",
"css-color-keywords": "^1.0.0",
"postcss-value-parser": "^4.0.2"
}
},
"cssom": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
@ -8549,6 +8569,14 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
"linkify-it": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
"integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
"requires": {
"uc.micro": "^1.0.1"
}
},
"load-json-file": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
@ -8798,6 +8826,30 @@
"object-visit": "^1.0.0"
}
},
"markdown-it": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
"integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
"requires": {
"argparse": "^1.0.7",
"entities": "~2.0.0",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
},
"dependencies": {
"entities": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
"integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ=="
}
}
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
},
"merge-stream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
@ -9973,6 +10025,11 @@
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
},
"postcss-value-parser": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
},
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@ -10365,6 +10422,14 @@
"prop-types": "^15.6.2"
}
},
"react-native-fit-image": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/react-native-fit-image/-/react-native-fit-image-1.5.5.tgz",
"integrity": "sha512-Wl3Vq2DQzxgsWKuW4USfck9zS7YzhvLNPpkwUUCF90bL32e1a0zOVQ3WsJILJOwzmPdHfzZmWasiiAUNBkhNkg==",
"requires": {
"prop-types": "^15.5.10"
}
},
"react-native-gesture-handler": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.7.0.tgz",
@ -10416,6 +10481,17 @@
"resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-1.4.1.tgz",
"integrity": "sha512-g1L1au6GtCd0Ci6lQ8JVPYgl7uvEtKY2jeVghJcV6qQEN9+qACyqjOIR8pskUyI+qcSj1z4/nZh3IFxDVu1drw=="
},
"react-native-markdown-display": {
"version": "6.1.6",
"resolved": "https://registry.npmjs.org/react-native-markdown-display/-/react-native-markdown-display-6.1.6.tgz",
"integrity": "sha512-B/nHcsJ/lFie/GCmQKU1EJeDNTYRRY/sHMQEC9nzJ5uN8pm5F0KTFfC/UZn/Jb9x8Mi/S0neBw54UL+sygphUg==",
"requires": {
"css-to-react-native": "^3.0.0",
"markdown-it": "^10.0.0",
"prop-types": "^15.7.2",
"react-native-fit-image": "^1.5.5"
}
},
"react-native-modalize": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/react-native-modalize/-/react-native-modalize-2.0.5.tgz",
@ -11916,6 +11992,11 @@
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz",
"integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ=="
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"uglify-es": {
"version": "3.3.9",
"resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",

View file

@ -43,6 +43,7 @@
"react-native-keychain": "^6.1.1",
"react-native-linear-gradient": "^2.5.6",
"react-native-localize": "^1.4.1",
"react-native-markdown-display": "^6.1.6",
"react-native-modalize": "^2.0.5",
"react-native-paper": "^4.0.1",
"react-native-permissions": "^2.1.5",

View file

@ -0,0 +1,381 @@
// @flow
import * as React from 'react';
import {Card, Text, Title, withTheme} from 'react-native-paper';
import {FlatList, StyleSheet} from "react-native";
import {View} from "react-native-animatable";
type PropsType = {};
type VersionType = {
bug_fix: Array<string>,
dev_notes: Array<string>,
news: Array<string>,
version: string,
releaseDate: string,
};
type JsonResponseType = {
currentVersion: VersionType,
nextVersion: VersionType,
previousVersions: Array<VersionType>,
}
type StateType = {
text: JsonResponseType,
}
const styles = StyleSheet.create({
title: {
fontSize: 20,
fontWeight: "bold",
textAlign: "center",
}
})
/**
* Read a text file and output the content
*
* Example Usage:
* <MarkdownRender
txt={url_to_file}
/>
*/
class MarkdownRender extends React.Component<PropsType, StateType> {
text: JsonResponseType = {
"currentVersion": {
"bug_fix": [
"- Correction de crash au démarrage sur certains appareils",
"- Correction de l'affichage de certains sites web"
],
"dev_notes": [
"- Force soloader 0.8.2"
],
"news": [
"- Mise à jour des écrans d'intro pour mieux refléter l'appli actuelle",
"- Déplacement du bouton *À propos* dans les paramètres",
"- Mode sombre par défaut parce que voilà"
],
"releaseData": "13/06/2020",
"version": "v3.0.7"
},
"nextVersion": {
"bug_fix": [
"- Correction d'un problème de connexion sur certains appareils android",
"- Correction de l'icône de notification sur Android",
"- Correction de bugs divers"
],
"dev_notes": [
"- Utilisation de prettier",
"- Utilisation de eslint avec config de airbnb",
"- Passage de React Native 62.2 à 63.2"
],
"news": [
"- Ajout d'une mascotte !",
"- Ajout de la sauvegarde des scores pour le jeu",
"- Ajout de la personnalisation de la dashboard",
"- Amélioration de l'intro",
"- Amélioration de la page du jeu",
"- Amélioration du visionnement des images",
"- Amélioration des traductions",
"- Amélioration des informations données par proxiwash",
"- Amélioration de la visibilité des services Amicale sans compte",
"- Améliorations générales de l'interface"
],
"releaseDate": "N/A",
"version": "v4.0.1"
},
"previousVersions": [
{
"bug_fix": [
],
"dev_notes": [
"- Passage de React Native 61.5 à 62.2",
"- Utilisation du moteur JS Hermes et proguard"
],
"news": [
"- Importante amélioration de la vitesse de démarrage et des performances",
"- Nouvelle réduction importante de la taille de l'application à télécharger et une fois installée"
],
"releaseDate": "28/05/2020",
"version": "v3.0.5"
},
{
"bug_fix": [
],
"dev_notes": [
"- Migration de Expo Managed Workflow à React Native Bare Workflow "
],
"news": [
"- Nouvelle barre de navigation !",
"- Nouveau planex tout beau tout neuf !",
"- Suppression du menu déroulant gauche",
"- Création d'une nouvelle catégorie dans la barre de navigation pour regrouper tous les services",
"- Ajout d'animations un peu partout parce que c'est joli et j'ai compris comment faire :D",
"- Ajout de la connexion au compte Amicale",
"- Ajout de la liste des clubs, des élections et du profil utilisateur à travers son compte Amicale",
"- Amélioration de la vitesse de démarrage et des performances",
"- Réduction importante de la taille de l'application à télécharger et une fois installée"
],
"releaseDate": "26/05/2020",
"version": "v3.0.0"
},
{
"bug_fix": [
],
"dev_notes": [
"- Utilisation de react-native-paper à la place de native base"
],
"news": [
"- Nouvelle interface !",
"- Amélioration des performances",
"- Amélioration de la vitesse de démarrage"
],
"releaseDate": "12/03/2020",
"version": "v2.0.0"
},
{
"bug_fix": [
"- Correction d'un problème d'affichage des détail du Proximo"
],
"dev_notes": [
],
"news": [
],
"releaseDate": "25/02/2020",
"version": "v1.5.2"
},
{
"bug_fix": [
],
"dev_notes": [
],
"news": [
"- Amélioration des performances",
"- Utilisation d'un tri des catégories du Proximo plus cohérent"
],
"releaseDate": "24/02/2020",
"version": "v1.5.1"
},
{
"bug_fix": [
],
"dev_notes": [
"- Passage de React Navigation 3 à 4",
"- Mise à jour d'autres librairies"
],
"news": [
"- Amélioration des performances de l'application",
"- Amélioration du menu gauche",
"- Ajout d'animations au changement d'écran",
"- Affichage de l'événement de l'accueil directement au clic, au lieu de juste amener sur la liste"
],
"releaseDate": "05/02/2020",
"version": "v1.5.0"
},
{
"bug_fix": [
"- Correction d'un crash lors du rafraichissement de planex",
"- Correction de bugs divers"
],
"dev_notes": [
],
"news": [
"- Ajout d'un accès rapide à BlueMind et l'ENT",
"- Amélioration de l'apparence du menu gauche",
"- Amélioration de l'affichage de Planex"
],
"releaseDate": "01/02/2020",
"version": "v1.4.0"
},
{
"bug_fix": [
"- Correction d'un problème de Planex mettant des cours sans couleur de fond"
],
"dev_notes": [
"- Yohan SIMARD rejoint le projet",
"- Passage de Expo SDK 33 à SDK 36",
"- Passage de React Native 59 à 61",
"- Mise à jour d'autres librairies"
],
"news": [
"- Ajout d'une barre de recherche dans Proximo",
"- Amélioration de l'interface Proximo",
"- Ajout d'un accès rapide au site des Élus Étudiants",
"- Amélioration du mode plein écran de Planex"
],
"releaseDate": "29/01/2020",
"version": "v1.3.3"
},
{
"bug_fix": [
"- Correction de quelques bugs"
],
"dev_notes": [
],
"news": [
"- Ajout du support du mode paysage dans l'écran Planex pour une vue de la semaine entière",
"- Ajout d'une page pour visualiser les salles en libre accès et réserver une Bib'Box",
"- Ajout de Tutor'INSA sur la dashboard pour un accès rapide",
"- Ouverture des sites web dans l'appli a la place d'utiliser le navigateur externe"
],
"releaseDate": "08/11/2019",
"version": "v1.3.0"
},
{
"bug_fix": [
"- - Corrections de bugs"
],
"dev_notes": [
],
"news": [
"- Ajout d'une dashboard sur la page d'accueil pour un accès rapide aux informations les plus importantes."
],
"releaseDate": "01/11/2019",
"version": "v1.2.0"
},
{
"bug_fix": [
],
"dev_notes": [
],
"news": [
"- Amélioration de la page Menu du RU",
"- Suppression de l'affichage des articles en rupture de stock dans la page Proximo",
"- Ajout de fonctionnalités de debug"
],
"releaseDate": "28/09/2019",
"version": "v1.1.1"
},
{
"bug_fix": [
],
"dev_notes": [
],
"news": [
"- Améliorations diverses de l'interface",
"- Ajout de l'écran planning des événements"
],
"releaseDate": "17/09/2019 ",
"version": "v1.1.0"
},
{
"bug_fix": [
"- Correction d'un crash sur l'écran du Proximo si l'utilisateur refuse les notifications"
],
"dev_notes": [
],
"news": [
"- Ajout de la possibilité de choisir un écran de démarrage"
],
"releaseDate": "13/09/2019",
"version": "v1.0.3"
},
{
"bug_fix": [
],
"dev_notes": [
],
"news": [
"- Amélioration de l'interface du Proximo",
"- Ajout de la possibilité de cliquer sur un article du Proximo pour afficher plus de détails"
],
"releaseDate": "12/09/2019",
"version": "v1.0.2"
},
{
"bug_fix": [
],
"dev_notes": [
],
"news": [
"- Première version officielle créée par Arnaud VERGNET"
],
"releaseDate": "27/08/2019",
"version": "v1.0.0"
}
]
}
/**
* Render json data inside a card
*
* @returns {*}
*/
getCardItemNews = ({item}: {item: VersionType}): React.Node => {
return (
<Card style={{ margin: 5}}>
<Card.Title
title={item.version}
subtitle={item.releaseDate}
/*
left={(iconProps: CardTitleIconPropsType): React.Node => (
<Avatar.Icon size={iconProps.size} icon="podium-gold"/>
)}
*/
/>
<Card.Content>
<Title>Nouveautés</Title>
<Text>
{item.news.map((txt: string): string => `${txt}\n`)}
</Text>
<Title>Correction des bugs</Title>
<Text>
{item.bug_fix.map((txt: string): string => `${txt}\n`)}
</Text>
</Card.Content>
</Card>
);
};
/**
* Extracts a key from the given item
*
* @param item The item to extract the key from
* @return {string} The extracted key
*/
keyExtractor = (item: VersionType): string => item.version;
render(): React.Node {
return (
<View style={{padding: 5}}>
<Text style={styles.title}>
Version actuelle
</Text>
{this.getCardItemNews({item: this.text.currentVersion})}
<Text style={styles.title}>
Versions précédentes
</Text>
<FlatList
data={this.text.previousVersions}
keyExtractor={this.keyExtractor}
renderItem={this.getCardItemNews}
/>
</View>
)
}
}
export default withTheme(MarkdownRender);

View file

@ -32,6 +32,7 @@ import EquipmentConfirmScreen from '../screens/Amicale/Equipment/EquipmentConfir
import DashboardEditScreen from '../screens/Other/Settings/DashboardEditScreen';
import GameStartScreen from '../screens/Game/screens/GameStartScreen';
import ImageGalleryScreen from '../screens/Media/ImageGalleryScreen';
import ChangelogScreen from "../screens/Other/ChangelogScreen";
const modalTransition =
Platform.OS === 'ios'
@ -214,6 +215,12 @@ function MainStackComponent(props: {
BugReportScreen,
i18n.t('screens.feedback.title'),
)}
{createScreenCollapsibleStack(
'changelog',
MainStack,
ChangelogScreen,
i18n.t('screens.about.changelog'),
)}
</MainStack.Navigator>
);
}

View file

@ -98,7 +98,8 @@ class AboutScreen extends React.Component<PropsType> {
},
{
onPressCallback: () => {
openWebLink(links.changelog);
const {navigation} = this.props;
navigation.navigate('changelog');
},
icon: 'refresh',
text: i18n.t('screens.about.changelog'),

View file

@ -0,0 +1,21 @@
// @flow
import * as React from 'react';
import {withTheme} from 'react-native-paper';
import CollapsibleScrollView from '../../components/Collapsible/CollapsibleScrollView';
import MarkdownRender from '../../components/Screens/MarkdownRenderScreen';
const url = "https://etud.insa-toulouse.fr/~leban/changelogV2.json"
// eslint-disable-next-line
class ChangelogScreen extends React.Component<null> {
render(): React.Node {
return (
<CollapsibleScrollView style={{padding: 5}}>
<MarkdownRender url={url}/>
</CollapsibleScrollView>
);
}
}
export default withTheme(ChangelogScreen);