{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":10395087,"defaultBranch":"master","name":"react","ownerLogin":"sophiebits","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2013-05-31T00:44:09.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/6820?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1695438080.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"976cb67ce21039e79f37b182de6d1ac2e853fb90","ref":"refs/heads/ship-diffincommitphase","pushedAt":"2023-09-23T03:01:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Ship diffInCommitPhase\n\nPerformance tests at Meta showed neutral results.","shortMessageHtmlLink":"Ship diffInCommitPhase"}},{"before":"ce51243f1556a529001715a4694a1f03396f047a","after":"d17a69385d29cd74d4bb98173470d75b25bdc5df","ref":"refs/heads/gh-26095","pushedAt":"2023-05-12T21:09:43.317Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Merge rerenderSES and updateSES again\n\nThis reverts commit 1920123b584ba29befdf1f793cd3b02e11b80182 and does a little cleanup.","shortMessageHtmlLink":"Merge rerenderSES and updateSES again"}},{"before":"1920123b584ba29befdf1f793cd3b02e11b80182","after":"ce51243f1556a529001715a4694a1f03396f047a","ref":"refs/heads/gh-26095","pushedAt":"2023-05-12T20:58:16.472Z","pushType":"push","commitsCount":1,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Merge rerenderSES and updateSES again\n\nThis reverts commit 1920123b584ba29befdf1f793cd3b02e11b80182 and does a little cleanup.","shortMessageHtmlLink":"Merge rerenderSES and updateSES again"}},{"before":"ee4c4a0670c27574729d84be0a7b52947dc72f8b","after":"fed72e3af4b109005866795be3474ae55ee7244d","ref":"refs/heads/formact-warndev","pushedAt":"2023-05-09T23:24:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Warn when formAction is used without a form","shortMessageHtmlLink":"Warn when formAction is used without a form"}},{"before":"a397c10f971ff4d3f77c47fa62b10c9ae52dc7ac","after":"ee4c4a0670c27574729d84be0a7b52947dc72f8b","ref":"refs/heads/formact-warndev","pushedAt":"2023-05-09T23:13:16.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Warn when formAction is used without a form","shortMessageHtmlLink":"Warn when formAction is used without a form"}},{"before":"75c948c4af7684eb487b892c1ea28d209ecfdbab","after":"a397c10f971ff4d3f77c47fa62b10c9ae52dc7ac","ref":"refs/heads/formact-warndev","pushedAt":"2023-05-09T22:54:12.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Warn when formAction is used without a form","shortMessageHtmlLink":"Warn when formAction is used without a form"}},{"before":"079b6b0ebeaa54aa8e5aed8accd59977cc6293ea","after":"1920123b584ba29befdf1f793cd3b02e11b80182","ref":"refs/heads/gh-26095","pushedAt":"2023-05-09T19:36:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Split out rerenderSyncExternalStore\n\nI think this also fixes a bug where updateStoreInstance would not be pushed on initial mount rerender.","shortMessageHtmlLink":"Split out rerenderSyncExternalStore"}},{"before":"cd4a70659932dcba0e7cea8f3c9bc108b9057aeb","after":"079b6b0ebeaa54aa8e5aed8accd59977cc6293ea","ref":"refs/heads/gh-26095","pushedAt":"2023-05-09T19:31:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Split out rerenderSyncExternalStore\n\nI think this also fixes a bug where updateStoreInstance would not be pushed on initial mount rerender.","shortMessageHtmlLink":"Split out rerenderSyncExternalStore"}},{"before":"484b290d3266665ef134d2341b00988d91e9e09d","after":"cd4a70659932dcba0e7cea8f3c9bc108b9057aeb","ref":"refs/heads/gh-26095","pushedAt":"2023-05-09T01:46:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix double render when hydrating in concurrent mode","shortMessageHtmlLink":"Fix double render when hydrating in concurrent mode"}},{"before":"2e01dd34b3c03a3bbfea71d7aea691067029eff7","after":"484b290d3266665ef134d2341b00988d91e9e09d","ref":"refs/heads/gh-26095","pushedAt":"2023-05-09T01:38:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix uSES hydration in strict mode\n\nPreviously, we'd call and use getSnapshot on the second render resulting in `Warning: Text content did not match. Server: \"Nay!\" Client: \"Yay!\"` and then `Error: Text content does not match server-rendered HTML.`.\n\nFixes #26095. Closes #26113.","shortMessageHtmlLink":"Fix uSES hydration in strict mode"}},{"before":"484b290d3266665ef134d2341b00988d91e9e09d","after":"2e01dd34b3c03a3bbfea71d7aea691067029eff7","ref":"refs/heads/gh-26095","pushedAt":"2023-05-09T01:27:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix double render when hydrating in concurrent mode","shortMessageHtmlLink":"Fix double render when hydrating in concurrent mode"}},{"before":null,"after":"1fb16d0c5189dbc5c8962df8eb17a2b628d0c79a","ref":"refs/heads/lazy-provider","pushedAt":"2023-05-08T06:46:49.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Allow wrapping context provider in lazy\n\nIs it OK to `export ContextProvider = Context.Provider;` from a `use client` file? If so, behold.","shortMessageHtmlLink":"Allow wrapping context provider in lazy"}},{"before":null,"after":"484b290d3266665ef134d2341b00988d91e9e09d","ref":"refs/heads/gh-26095","pushedAt":"2023-05-07T21:10:32.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix uSES hydration in strict mode\n\nPreviously, we'd call and use getSnapshot on the second render resulting in `Warning: Text content did not match. Server: \"Nay!\" Client: \"Yay!\"` and then `Error: Text content does not match server-rendered HTML.`.\n\nFixes #26095. Closes #26113.","shortMessageHtmlLink":"Fix uSES hydration in strict mode"}},{"before":"24246d24215b1fd6a112cca72acb819a841febf9","after":"75c948c4af7684eb487b892c1ea28d209ecfdbab","ref":"refs/heads/formact-warndev","pushedAt":"2023-05-01T21:13:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Warn when formAction is used without a form","shortMessageHtmlLink":"Warn when formAction is used without a form"}},{"before":null,"after":"24246d24215b1fd6a112cca72acb819a841febf9","ref":"refs/heads/formact-warndev","pushedAt":"2023-05-01T20:58:30.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Warn when formAction is used without a form","shortMessageHtmlLink":"Warn when formAction is used without a form"}},{"before":null,"after":"2be5e7bf40ef55a5d392f343eefd5f846e0de94a","ref":"refs/heads/event-cleanup","pushedAt":"2023-04-20T01:38:54.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Add two event system cleanup TODOs","shortMessageHtmlLink":"Add two event system cleanup TODOs"}},{"before":null,"after":"0750c978dc14cc5b19b1a52454319f7f0ed9ccde","ref":"refs/heads/string-slice","pushedAt":"2023-04-19T21:13:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Use .slice() for all substring-ing\n\n- substr is Annex B\n- substring silently flips its arguments if they're in the \"wrong order\", which is confusing\n- slice is better than sliced bread (no pun intended) and also it works the same way on Arrays so there's less to remember","shortMessageHtmlLink":"Use .slice() for all substring-ing"}},{"before":"7d03b08713acd1032131a90982e52c6df4758def","after":"9a6aa5d454816a8d524a4a14716b903dfba3001b","ref":"refs/heads/flight-date","pushedAt":"2023-04-19T01:39:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"[Flight] Serialize Date\n\nThis is kind of annoying because Date implements toJSON so JSON.stringify turns it into a string before calling our replacer function.","shortMessageHtmlLink":"[Flight] Serialize Date"}},{"before":"cfff494538b4a6bcbfad0f8af0ab997b8fb6206b","after":"91b3cc6cf60095f424e3dfb73a62f6fcdcb462a5","ref":"refs/heads/noop-then","pushedAt":"2023-04-19T01:25:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Allow passing client exports through async code","shortMessageHtmlLink":"Allow passing client exports through async code"}},{"before":null,"after":"cfff494538b4a6bcbfad0f8af0ab997b8fb6206b","ref":"refs/heads/noop-then","pushedAt":"2023-04-19T01:24:11.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Allow passing client exports through async code","shortMessageHtmlLink":"Allow passing client exports through async code"}},{"before":"bfb57d2f2e0b9b48a45eca27ac66e1fd94b65ca4","after":"7d03b08713acd1032131a90982e52c6df4758def","ref":"refs/heads/flight-date","pushedAt":"2023-04-18T22:53:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"[Flight] Serialize Date\n\nThis is kind of annoying because Date implements toJSON so JSON.stringify turns it into a string before calling our replacer function.","shortMessageHtmlLink":"[Flight] Serialize Date"}},{"before":"77683a16ba7b5945f4fab332eaaee87f3f4bc19b","after":"1eb923fe29b921265e363a75bd5f97c780a727ec","ref":"refs/heads/dirty-value","pushedAt":"2023-04-18T17:51:15.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Add assertions about value dirty state\n\nSince this is an observable behavior and is hard to think about, seems good to have tests for this.\n\nThe expected value included in each test is the behavior that existed prior to #26546.","shortMessageHtmlLink":"Add assertions about <input> value dirty state"}},{"before":"70fce26ac4e27fe68e2fedd090b780f438ec8dd5","after":"38134f5458f825c0717c8075491df30ae500a772","ref":"refs/heads/input-bug","pushedAt":"2023-04-18T17:32:55.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix input tracking bug\n\nIn https://github.com/facebook/react/pull/26573/commits/2019ddc75f448292ffa6429d7625514af192631b, we changed to set .defaultValue before .value on updates. In some cases, setting .defaultValue causes .value to change, and since we only set .value if it has the wrong value, this resulted in us not assigning to .value, which resulted in inputValueTracking not knowing the right value. See new test added.\n\nMy fix here is to (a) move the value setting back up first and (b) narrowing the fix in the aforementioned PR to newly remove the value attribute only if it defaultValue was previously present in props.\n\nThe second half is necessary because for types where the value property and attribute are indelibly linked (hidden checkbox radio submit image reset button, i.e. spec modes default or default/on from https://html.spec.whatwg.org/multipage/input.html#dom-input-value-default), we can't remove the value attribute after setting .value, because that will undo the assignment we just did! That is, not having (b) makes all of those types fail to handle updating props.value.\n\nThis code is incredibly hard to think about but I think this is right (or at least, as right as the old code was) because we set .value here only if the nextProps.value != null, and we now remove defaultValue only if lastProps.defaultValue != null. These can't happen at the same time because we have long warned if value and defaultValue are simultaneously specified, and also if a component switches between controlled and uncontrolled.\n\nAlso, it fixes the test in https://github.com/facebook/react/pull/26626.","shortMessageHtmlLink":"Fix input tracking bug"}},{"before":"06a1bda3027d4866531778bbcc430c95e8724594","after":"a4b9f9cf600bc47549e2bfc48297e6d5fdb820f4","ref":"refs/heads/escape","pushedAt":"2023-04-15T17:55:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Use href= not href~= to fix tests\n\njsdom's implementation of ~= is buggy (just filed https://github.com/dperini/nwsapi/issues/84) -- but = is a better fit here regardless since href is not a space-separated list of values.","shortMessageHtmlLink":"Use href= not href~= to fix tests"}},{"before":"aa600e8f2b15152262523390af27b12d31e97f80","after":"06a1bda3027d4866531778bbcc430c95e8724594","ref":"refs/heads/escape","pushedAt":"2023-04-15T05:04:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Add whitespace after escapes","shortMessageHtmlLink":"Add whitespace after escapes"}},{"before":null,"after":"aa600e8f2b15152262523390af27b12d31e97f80","ref":"refs/heads/escape","pushedAt":"2023-04-15T00:42:25.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix escaping in ReactDOMInput code\n\nJSON.stringify isn't the right thing here. Luckily this doesn't look to have any security impact.","shortMessageHtmlLink":"Fix escaping in ReactDOMInput code"}},{"before":"2264ffccb80a31294aae49603d3b18c46ad450d6","after":"c2fe078cb954d9594cdb13f8f8814f5ed66c65cf","ref":"refs/heads/flight-wnums","pushedAt":"2023-04-14T16:35:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"[Flight] Fix style nit from #26623\n\nMaybe this is faster. https://github.com/facebook/react/pull/26623#discussion_r1167053174","shortMessageHtmlLink":"[Flight] Fix style nit from facebook#26623"}},{"before":"270582a389c95b5f779b78e490c50de0f2667c67","after":"2264ffccb80a31294aae49603d3b18c46ad450d6","ref":"refs/heads/flight-wnums","pushedAt":"2023-04-14T16:17:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"[Flight] Serialize weird numbers","shortMessageHtmlLink":"[Flight] Serialize weird numbers"}},{"before":null,"after":"70fce26ac4e27fe68e2fedd090b780f438ec8dd5","ref":"refs/heads/input-bug","pushedAt":"2023-04-14T05:03:28.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Fix input tracking bug\n\nIn https://github.com/facebook/react/pull/26573/commits/2019ddc75f448292ffa6429d7625514af192631b, we changed to set .defaultValue before .value on updates. In some cases, setting .defaultValue causes .value to change, and since we only set .value if it has the wrong value, this resulted in us not assigning to .value, which resulted in inputValueTracking not knowing the right value. See new test added.\n\nMy fix here is to (a) move the value setting back up first and (b) narrowing the fix in the aforementioned PR to newly remove the value attribute only if it defaultValue was previously present in props.\n\nThe second half is necessary because for types where the value property and attribute are indelibly linked (hidden checkbox radio submit image reset button, i.e. spec modes default or default/on from https://html.spec.whatwg.org/multipage/input.html#dom-input-value-default), we can't remove the value attribute after setting .value, because that will undo the assignment we just did! That is, not having (b) makes all of those types fail to handle updating props.value.\n\nThis code is incredibly hard to think about but I think this is right (or at least, as right as the old code was) because we set .value here only if the nextProps.value != null, and we now remove defaultValue only if lastProps.defaultValue != null. These can't happen at the same time because we have long warned if value and defaultValue are simultaneously specified, and also if a component switches between controlled and uncontrolled.\n\nAlso, it fixes the test in https://github.com/facebook/react/pull/26626.","shortMessageHtmlLink":"Fix input tracking bug"}},{"before":"303248012997584e20aa5273b77116a971116e2b","after":"77683a16ba7b5945f4fab332eaaee87f3f4bc19b","ref":"refs/heads/dirty-value","pushedAt":"2023-04-14T05:03:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"sophiebits","name":"Sophie Alpert","path":"/sophiebits","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6820?s=80&v=4"},"commit":{"message":"Add assertions about value dirty state\n\nSince this is an observable behavior and is hard to think about, seems good to have tests for this.\n\nThe expected value included in each test is the behavior that existed prior to #26546.","shortMessageHtmlLink":"Add assertions about <input> value dirty state"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADhw1m8AA","startCursor":null,"endCursor":null}},"title":"Activity ยท sophiebits/react"}