//tips
夜の仮眠による分割睡眠はどうか、または睡眠改善薬で単一睡眠を強化するか。
//smart contract
Whereの条件二つ分userid==1 or Towhom==“1”出取得したデータのを融合作業をしていく。
export const getStaticProps の中身の改良。
二つの条件を融合させるために別のメソッドを経由して
.then(result => {
result.forEach(docSnapshot => {
での展開を実行させる。
融合用の別メソッドの作成。
async function getIsBoth() {
const colRef= await collection(firebaseApp, "directmessage")
const isTo = colRef.where('userid', '==', id).get();
const isFrom = colRef.where(‘Towhom, '==', context.params.id).get();
const [isToQuerySnapshot, isFromQuerySnapshot] = await Promise.all([
isTo,
isFrom
]);
const isToArray = isToQuerySnapshot.docs;
const isFromArray = isFromQuerySnapshot.docs;
const ToFromArray = isToArray.concat(isFromArray);
return ToFromArray;
}
そこまで記述量は多くなかったのでgetStaticPropsにメソッドをそのまま導入してしまう。
export const getStaticProps = async (context) => {
let posts = []
const id = parseInt(context.params.id)
const colRef= await collection(firebaseApp, "directmessage")
const isTo = colRef.where('userid', '==', id).get();
const isFrom = colRef.where('Towhom', '==', context.params.id).get();
const [isToQuerySnapshot, isFromQuerySnapshot] = await Promise.all([
isTo,
isFrom
]);
const isToArray = isToQuerySnapshot.docs;
const isFromArray = isFromQuerySnapshot.docs;
const ToFromArray = isToArray.concat(isFromArray);
// const q = await query(colRef,where("userid","==",id))
//await getDocs(q)
await ToFromArray
.then((snapshot)=>{
snapshot.docs.forEach(doc => {
const data = doc.data()
console.log('data.title')
これでninjaには自身が送付側の場合と受取側の場合の両方の情報を取ることができる。
{ninja.map((item,index) => (にて受取側の情報も表示されるかの確認。
colRef.where('userid', '==', id).get();でエラーが出たので最新表記に変更。
下記で試す。
const isTo = query(colRef,where("userid","==",id)).get();
const isFrom = query(colRef,where('Towhom', '==', context.params.id)).get();
.get()部分がエラー。次にconcatでエラー。
新バージョンのfirestorageに通用しない。
一旦元の形に戻し、snapshot.docs.forEach(doc => {の中でデータを選別することにする。
await getDocs(colRef)
.then((snapshot)=>{
snapshot.docs.forEach(doc => {
const data = doc.data()
console.log('data.title')
const pile={}
if(data.userid==id||data.Towhom==context.params.id){
Towhomにて記載されている部分がきちんと表示されない。data.Towhom==context.params.idのデータがきちんと取れていないようなのでログの確認。
ログにも出ていないのでデータベースを確認してみるとTowhomのみが1のものが削除されていた。こちらを復元すると無事に表示させることができた。
ここからさらに時間の順番に表示を並び替えていく。
時間を取得しようとしたところ配列に格納されていなかったので追加。
pile.date = data.date ?data.date:null
以前使用したsortを活用。
let ninjav = ninja.sort(function(a, b) {
return (a.cardorder < b.cardorder) ? -1 : 1; //オブジェクトの昇順ソート
//return (a.cardorder > b.cardorder) ? -1 : 1; //オブジェクトの降順ソート
});
これを応用し、
{ninjav.map((item,index) => (
<div key={index} >
<Typography className={classes.titlebackshape}>
{item.username}: {item.Message}:{item.date}
</Typography>
</div>
))
}
こちらにてきちんと順番にメッセージを表示させることができた。
さらにここからTowhomがある場合には表示を分岐させるようにさせる。
{ninjav.map((item,index) => (
<div key={index} >
{item.userid==localStorage.getItem('authuserid')
?
<Typography className={classes.titlebackshape}>
{item.username}: {item.Message}:{item.date}:right
</Typography>
:
<Typography className={classes.titlebackshape}>
{item.username}: {item.Message}:{item.date}
</Typography>
}
localStorage.getItem('authuserid’)でエラーが発生。
見直していてまずいと気がつく。
というのも既にメールのみでの運用に特化しているためlocalStorage.setItem('authuserid',ninja[0].userid)は成立しない。
Messageページでは自身のidはauthuseridとして取り出して運用する必要がある。
localStorage.setItem('authuserid',ninja[0].userid)の記述は削除。
代わりに変数に詰め込む。
const [authid, setauthid] = useState('')
useEffect(() => {
// if(localStorage.getItem('authhistory')==ninja[0].mail){ localStorage.setItem('authuserid',ninja[0].userid)}
setauthid(localStorage.getItem('authuserid'))
}
, [])
{item.userid==authidとしてきちんと分岐させることができた。これで発言者が自分か相手かを視覚的に区別できる。
さて、ここでuser1に関するメールの全てとその送受信の立場を確認することができたので、一対一のメッセージ関係にメッセージを分離させていく必要がある。
メッセージの抜き出しに会話主の制限を加えるので、遷移してきた場合には、下記二つのuseridに該当しないものは弾く必要がある。
{item.userid==localStorage.getItem('authuserid')&&(
{item.userid==localStorage.getItem('Towhom')&&(
遷移してきた場合ではなく、直にメッセージページにきた場合のことも別に考える必要があるがこれは後で。
三項演算子の外にもう一つ制限を加えるか。